file_get_contents超时

时间:2012-04-17 10:11:51

标签: php timeout file-get-contents

我正在使用file_get_contents,我希望define a timeout。我尝试通过创建这样的上下文来实现:

$timeout = array('http' => array('timeout' => 6));

$context = stream_context_create($timeout);

$xml = file_get_contents($hostName,false,$context);

但它忽略了这个价值。

3 个答案:

答案 0 :(得分:2)

我认为默认超时设置为60秒。 您可以将其更改为您想要的任何值。

<?php

$ctx=stream_context_create(array('http'=>
    array(
        'timeout' => 30 // 30 sec
    )
));

$conetnt = file_get_contents('http://example.com',false,$ctx);
var_dump($conetnt);
?>

答案 1 :(得分:1)

从PHP 5.2.1开始,您可以指定timeout上下文选项并将上下文传递给file_get_contents()

ini_set('default_socket_timeout',    120);

答案 2 :(得分:1)

由于我仍然无法发表评论(编辑或标记问题(作为副本(?))在这种情况下可能不太合适),让我添加一个后续问题,并将评论作为答案:< / p>

  • 当你说:
      

    我为超时分配了一个小值,尽管这个file_get_contents返回了良好的结果

你的意思是即使你设置超时,比如1秒,file_get_contents()需要更多的时间,并且没有超时?您是否有任何低级监控可用于区分“连接”和“读取”数据所需的时间?

  • 因为Fanis在对问题“PHP file_get_contents ignoring timeout?”的回答中说,如果您使用的是“file_get_contents()”(而不是低级套接字函数),那么“ connect “远程服务器”无法通过可用的ini设置或上下文条目进行设置。您只需设置“读取”超时。

(我意识到这是一个老问题,但我在搜索中遇到了这两个问题,因为我有同样的问题,并认为我应该建立它们之间的联系)