我正在使用file_get_contents
来获取外部网页的标头,以确定外部网页是否在线,如下所示:
$URL = "http://page.location/";
$Context = stream_context_create(array(
'http' => array(
'method' => 'GET',
)
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;
$header = substr($ResponseHeaders[0], 9, 3);
if($header[0] == "5" || $header[0] == "4"){
//do stuff
}
除非页面响应时间过长,否则此操作正常。
如何设置超时?
如果尚未完成,file_get_headers
将返回 FALSE ,如果尚未完成file_get_contents
请求,PHP会移至下一行吗?
答案 0 :(得分:12)
以下是如何为此功能设置超时的示例:
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>
答案 1 :(得分:10)
在timeout
stream_context_array
密钥
$Context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'timeout' => 30, //<---- Here (That is in seconds)
)
));
如果file_get_headers尚未完成,则返回FALSE 如果没有完成,PHP将移动到下一行 file_get_contents请求?
是,它将返回FALSE以及下面显示的警告消息。
连接尝试失败,因为连接方没有 在一段时间后正确回应,或建立连接 失败,因为连接的主机无法响应。