在 PHP 中从远程服务器检索文件时处理延迟

Bri*_*ian 5 php apache file-get-contents remote-server

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

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

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

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

谢谢,布莱恩

Qua*_*mis 5

$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 );
Run Code Online (Sandbox Code Playgroud)

查看HTTP 上下文stream_context_create选项。上面的代码将设置连接超时,并允许一次重定向。

这应该可以防止超时。

长时间的延迟可能是由网络或具有防火墙的远程服务器(拒绝您一次获取太多文件)或远程主机路径上不稳定的 DNS 服务器或路由器引起的。建议您在本地缓存下载的文件,以便下次刷新时文件将在本地处理,而不是在大范围的网络上处理。