在PHP中从远程服务器检索文件时处理延迟
-
05-07-2019 - |
题
我正在使用PHP从远程服务器访问文件和照片。我主要使用file_get_contents()和copy()函数。
有时访问小型文本文件或照片几乎是即时的,但有时候它似乎会“卡住”。在同一个确切的文件上一分钟。有时它实际上导致我的脚本挂起,即使我停止脚本,Apache仍然会被锁定几分钟。
我非常愿意接受互联网连接不稳定这一事实。我担心的是我优雅地恢复并且我没有崩溃Apache - PHP set_time_limit()函数只返回致命错误。此外,PHP手册中还有一个注释,即在流操作上花费的时间不会影响脚本的运行时间。
如何从这些连接问题中恢复并允许我的脚本继续?为什么这会导致Apache挂起?
谢谢,Brian
解决方案
$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_create
和 HTTP上下文选项。上面的代码将在连接上设置超时,并允许一次重定向。
这可以防止达到超时。
长时间延迟可能是由网络或具有防火墙的远程服务器导致您拒绝一次抓取太多文件或由远程主机路径上的片状DNS服务器或路由器造成的。作为建议,你应该在本地缓存下载的文件,因此下一个刷新文件将在本地而不是大网上处理。
不隶属于 StackOverflow