问题描述
|
我使用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ѭ符号并修复出现的任何错误。