URL的奇怪结果

时间:2012-12-19 10:15:43

标签: php url file-get-contents

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是一个未定义的变量。

任何人都知道这里的问题是什么?

2 个答案:

答案 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)