2009-10-22 67 views
4

我正在使用PHP从远程服务器访问文件和照片。我主要使用file_get_contents()和copy()函数。在PHP中从远程服务器检索文件时处理延迟

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

我非常愿意接受互联网连接可以是片状的事实。我的担心是我恢复正常,并且我没有崩溃Apache - PHP set_time_limit()函数只返回致命错误。另外,在PHP手册中还有一个提示:在流操作上花费的时间不会影响脚本的运行时间。

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

感谢布

回答

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

+0

令人惊叹。非常感谢。 – Brian 2009-10-22 16:53:12