file_get_contents timeout


file_get_contents timeout

我正在使用file_get_contents,我想定义一个超时。我试图通过创建这样的上下文来做到这一点:

$timeout = array('http' => array('timeout' => 6));
$context = stream_context_create($timeout);
$xml = file_get_contents($hostName,false,$context);

但它忽略了这个值。

我想默认超时设置为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);
?>

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

ini_set('default_socket_timeout',    120);

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

  • 当你说:

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

你的意思是,即使你设置了一个超时,比如说,1秒,file_get_contents()也需要更多,并且不会超时?您是否有任何低级别的监视可用于区分"连接"和"读取"数据所需的时间?

  • 因为正如 Fanis 在回答问题"PHP file_get_contents忽略超时?"时所说,如果您使用的是"file_get_contents()"(而不是较低级别的套接字函数),则"连接"到远程服务器的时间不能通过可用的 ini 设置或上下文条目来设置。您只设置了这些"读取"超时。

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