http://!@#$%^&*().com
这似乎是一个无效的网址,实际上浏览器说它的网址无效。
但是当我通过file_get_contents(XAMPP)获取此URL时,它会出现“500 Internal Server Error”的异常,因为此URL不存在,为什么我没有获得404?
检查我正在使用的响应
$http_response_header
这是我的代码:
$url = "http://!@#$%^&*().com";
$contents = @file_get_contents($url);
print_r($http_response_header);
当我在另一台机器(WAMP)上运行它时,它说$http_response_header
是一个未定义的变量。
任何人都知道这里的问题是什么?
答案 0 :(得分:1)
您在file_get_contents
电话中抑制错误,您输入的域实际上是无效的,并且函数调用将返回false并触发以下警告
file_get_contents(http://.@#$%^&*().com): failed to open stream: operation failed
您将无法获得404,因为该域无效且可能永远不会发送http请求,因此您的$http_response_header
为空。
XAMPP和WAMP之间OS或PHP版本的差异可能解释了为什么它们的行为不同?
我的建议是首先检查file_get_contents的返回值,并且只有当它不为false时才继续检查响应头。
答案 1 :(得分:0)
您未获得404
,因为该域名不存在。尝试使用有效的域名。使用http://.@#$%^&*().com
将返回failed to open stream: operation failed
,而有效域将返回failed to open stream: HTTP request failed
请注意一个是operation failed
而另一个HTTP request failed
只有在HTTP请求失败时才会出现HTTP错误
示例
error_reporting(E_ALL);
ini_set("display_errors", "On");
$url = "http://stockoverflow.com/xxxx"; // URL does not exist
$response = @file_get_contents($url);
var_dump($response,$http_response_header);
输出
boolean false
array (size=7)
0 => string 'HTTP/1.1 404 Not Found' (length=22) <--- you get your 404
1 => string 'Content-Type: text/html' (length=23)
2 => string 'Server: Microsoft-IIS/7.5' (length=25)
3 => string 'X-Powered-By: ASP.NET' (length=21)
4 => string 'Date: Wed, 19 Dec 2012 10:26:20 GMT' (length=35)
5 => string 'Connection: close' (length=17)
6 => string 'Content-Length: 1245' (length=20)