PHP代理-错误时返回响应

问题描述

| 我使用PHP作为代理(用于JS XMLHttpRequest)。 在下面的代码中:   处理= @fopen(...);      如果(!$ handle)   {      、、、      } 如果要输入IF,我想从服务器返回响应(标头+正文)。 我怎样才能做到这一点?     

解决方法

        您可以在
fopen
失败时返回您认为合适的HTTP状态,例如:
if (!$handle) {
    header(\'HTTP/1.1 500 Internal Server Error\');
    // header(\'HTTP/1.1 404 Not Found\');
    die();
}
    ,        使用cURL比使用
fopen
更好。它不仅速度更快,而且IIRC您可以对选项进行更细粒度的控制。 编辑:建议我给出一个如何使用此示例。最好的示例在PHP的文档中-http://www.php.net/manual/zh-cn/curl.examples-basic.php此示例非常接近我想您要执行的操作。您需要将CURLOPT_HEADER选项更改为1或TRUE。 您可以使用大量选项来自定义cURL的行为。该页面将告诉您一切:http://www.php.net/manual/zh/function.curl-setopt.php 如果您有时间,建议您浏览一下cURL文档-http://www.php.net/manual/en/book.curl.php这是一个功能强大的扩展,非常有用。     ,        您的if语句显示“ 3”,表示“如果fopen()失败”。如果
fopen()
失败,则您将无法读取响应正文或标头。
fopen()
的返回值是从服务器返回的数据的唯一句柄。 更新: 这是如何使用
error_get_last()
而不是
$handle
获取信息的示例:
<?php
$handle = fopen(\"http://www.google.com/doesntwork.html\",\"r\");
if (!$handle){
    $error = error_get_last();
    $m=array();
    $i = preg_match(\'/(HTTP\\/1.[01]) ([0-9]+) (.*)/\',$error[\'message\'],$m);
    if($i){
        echo \"HTTP version: \".$m[1].\"<br>\\n\";
        echo \"HTTP status: \".$m[2].\"<br>\\n\";
        echo \"HTTP message: \".$m[3].\"<br>\\n\";
    }
} else {
    $output=\"\";
    while(!feof($handle)){
        $output .= htmlspecialchars(fgets($handle,1024));
    }
    fclose($handle);
    echo \"fopen returned with result: $output<br>\\n\";
}
?>
正如另一位用户发布的那样,最好使用
fopen()
包装器和/或cURL。另外,您不应该禁止警告/错误...删除the10ѭ符号并修复出现的任何错误。