PHP - 设置 file_get_contents 的超时时间

11

我正在使用 file_get_contents 函数来获取外部页面的报头(header),以确定该外部页面是否在线,代码如下:

$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会继续执行下一行代码吗?


这里曾经有一个类似的问题:https://dev59.com/sGkv5IYBdhLWcg3w9lWi - Simon East
2个回答

11

以下是如何为此函数设置超时时间的示例:

<?php
$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
        )
    )
);
file_get_contents("http://example.com/", 0, $ctx);
?>

9
stream_context_array中添加一个timeout键。
$Context = stream_context_create(array(
'http' => array(
    'method' => 'GET',
    'timeout' => 30, //<---- Here (That is in seconds)
)
));

你的问题....

如果 file_get_contents 请求尚未完成,它会返回 FALSE 吗? 并且如果请求尚未完成,PHP 是否会移动到下一行?

是的,它会返回 FALSE,同时附带如下警告信息:

由于经过一段时间后连接方没有正确答复或已经断开连接,连接尝试失败。


1
谢谢您的快速回答。我发现了一个很棒的测试工具,对于任何阅读这个问题的人可能都会有用。http://www.seanshadmand.com/2012/06/21/fake-response-server-slow-response-time-generator/ - user2107004

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接