【问题标题】:file_get_contents timeoutfile_get_contents 超时
【发布时间】:2012-04-28 16:11:31
【问题描述】:

我正在使用file_get_contents,我想使用define a timeout。我试图通过创建这样的上下文来做到这一点:

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

$context = stream_context_create($timeout);

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

但它忽略了这个值。

【问题讨论】:

  • 你怎么能说它忽略了那个超时设置?
  • timeout 是在 5.2.1 中添加的,请检查您的 PHP 版本。
  • 我为超时分配了一个小值,尽管这个 file_get_contents 返回了良好的结果

标签: php timeout file-get-contents


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    ini_set('default_socket_timeout',    120);
    

    【讨论】:

    • 我已经试过这个 ini_set('default_socket_timeout', 5); $xml = file_get_contents($hostName);但它不起作用
    【解决方案3】:

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

    • 当你说:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2016-10-10
      • 2013-02-15
      • 2014-05-09
      • 2012-05-01
      相关资源
      最近更新 更多