如何解决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ѭ符号并修复出现的任何错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。