我正在使用PHP从远程服务器访问文件和照片。 我主要使用file_get_contents()和copy()函数。
有时访问一个小的文本文件或照片几乎是即时的,但其他时间似乎在同一个确切的文件“卡住”一分钟。 有时候这实际上会导致我的脚本挂起,甚至当我停止脚本时,Apache仍然被locking几分钟。
我非常愿意接受互联网连接可能很脆弱的事实。 我关心的是,我恢复正常,我不会崩溃的Apache – PHP的set_time_limit()函数只返回一个致命的错误。 另外,在PHP手册中还有一个注释:在stream操作上花费的时间不会影响脚本的运行时间。
我怎样才能从这样的连接问题中恢复,并允许我的脚本继续? 为什么这会导致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服务器或路由器造成的。 作为一个建议,你应该在本地缓存下载的文件,所以下一个刷新文件将在本地处理,而不是大的宽网。