$url = 'http://a.url/i-know-is-down';
//ini_set('default_socket_timeout', 5);
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 5,
'ignore_errors' => true
)
)
);
$start = microtime(true);
$content = @file_get_contents($url, false, $ctx);
$end = microtime(true);
echo $end - $start, "\n";
我通常获得的响应时间为21.232秒,这不应该是大约5秒钟吗?
取消注释 ini_set 行并没有帮助。
ingnore_errors
,因为我需要区分诸如404错误和由连接问题生成的错误。让我重新表述一下。如果ingnore_errors
关闭,并且服务器返回404,则$content将为false,我需要知道$content是否为false是因为404错误还是因为连接错误。当我禁用@操作符时显示的错误是通用的,例如“file_get_contents(filename):无法打开流”。 - Cesarfile_get_contents()
后读取$http_response_header
。它将以由服务器返回的HTTP标头的数组形式被填充。你可以获取除了服务器连接问题(比如找不到服务器,超时,拒绝连接等)之外的所有错误。 - MestreLion