在PHP中从远程服务器检索文件时处理延迟
作者:互联网
我正在使用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 Context Options.上面的代码将在连接上设置超时,并允许一次重定向.
这应该可以防止达到超时.
长时间延迟可能是由网络或具有防火墙的远程服务器导致您拒绝一次获取太多文件或由远程主机路径上的片状DNS服务器或路由器引起的.作为建议,您应该在本地缓存下载的文件,因此下一个刷新文件将在本地而不是大型网络中处理.
标签:apache,php,file-get-contents,remote-server 来源: https://codeday.me/bug/20190627/1301433.html