Bri*_*ian 5 php apache file-get-contents remote-server
我正在使用 PHP 来访问远程服务器上的文件和照片。我主要使用 file_get_contents() 和 copy() 函数。
有时访问一个小文本文件或照片几乎是即时的,但有时它似乎会在同一个文件上“卡住”一分钟。有时它实际上会导致我的脚本挂起,即使我停止脚本,Apache 仍会锁定几分钟。
我非常愿意接受互联网连接可能不稳定的事实。我担心的是我可以正常恢复并且不会使 Apache 崩溃 - PHP set_time_limit() 函数仅返回致命错误。另外,PHP手册中有一条注释,流操作所花费的时间不会影响脚本的运行时间。
如何从此类连接问题中恢复并允许我的脚本继续运行?为什么这会导致 Apache 挂起?
谢谢,布莱恩
$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 服务器或路由器引起的。建议您在本地缓存下载的文件,以便下次刷新时文件将在本地处理,而不是在大范围的网络上处理。