4

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

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

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

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

谢谢,布赖恩

4

1 回答 1

4
$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 服务器或路由器造成的。作为建议,您应该在本地缓存下载的文件,以便下次刷新文件将在本地而不是大网处理。

于 2009-10-22T12:38:49.183 回答