【问题标题】:Handling delays when retrieving files from remote server in PHP在 PHP 中从远程服务器检索文件时处理延迟
【发布时间】:2009-10-22 04:44:18
【问题描述】:

我正在使用 PHP 从远程服务器访问文件和照片。我主要使用 file_get_contents() 和 copy() 函数。

有时访问一个小文本文件或照片几乎是即时的,但有时它似乎在同一个文件上“卡住”了一分钟。有时它实际上会导致我的脚本挂起,甚至当我停止脚本时,Apache 仍然被锁定了几分钟。

我非常愿意接受互联网连接不稳定的事实。我担心的是我可以正常恢复并且不会使 Apache 崩溃 - PHP set_time_limit() 函数只返回一个致命错误。另外,PHP 手册中有一个说明,流操作所花费的时间不影响脚本的运行时间。

如何从此类连接问题中恢复并允许我的脚本继续运行?为什么这会导致 Apache 挂起?

谢谢,布赖恩

【问题讨论】:

    标签: php apache file-get-contents remote-server


    【解决方案1】:
    $options = array( 'http' => array(
          'user_agent'    => 'Firefox wannabe',
          'max_redirects' => 1,
          'timeout'       => 10,
      ) );
    $context = stream_context_create( $options );
    $content = file_get_contents( $url, false, $context );
    

    看看stream_context_createHTTP Context Options。上面的代码将设置连接超时,并允许一次重定向。

    这应该可以防止达到超时。

    长时间的延迟可能是由于网络或远程服务器的防火墙拒绝您一次抓取太多文件或远程主机路径上的不稳定 DNS 服务器或路由器造成的。作为建议,您应该将下载的文件缓存在本地,这样下次刷新文件将在本地而不是大网处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      相关资源
      最近更新 更多