php – file_get_contents https 1分钟超时?
发布时间:2020-12-13 16:58:55 所属栏目:PHP教程 来源:网络整理
导读:当通过https访问某些资源时,我的 PHP的file_get_contents挂起60秒有困难. 我不确定它是客户端还是服务器端问题. 在客户端 在命令行上工作: $URL="https://example.com/some/path"$wget "$URL" -O /dev/null -q # takes a few milliseconds$curl "$URL" /dev
当通过https访问某些资源时,我的
PHP的file_get_contents挂起60秒有困难.
我不确定它是客户端还是服务器端问题. 在客户端 在命令行上工作: $URL="https://example.com/some/path" $wget "$URL" -O /dev/null -q # takes a few milliseconds $curl "$URL" >/dev/null # takes a few milliseconds $php -r 'file_get_contents("'"$URL"'")' # takes 61s! 在服务器上 一条线被立即写入Apache(2.4)访问日志以获取正确的SSL vhost,并且响应为200(成功).这令人困惑的时间表令人困惑: 客户端触发了> 0s php的file_get_contents 从Ubuntu 14.04和Debian 8客户端测试.有问题的资源都在运行带有ITK worker和PHP 5.6的Apache 2.4的Debian 8服务器上.我已经尝试了防火墙关闭(默认的ACCEPT策略),所以不是这样.铌.服务器已禁用IPv6,这可能是相关的,因为当我首先尝试IPv6时,我注意到这样的超时.但是被访问的主机没有AAAA记录,并且apache日志显示(a)SSL已建立好并且(b)请求有效并已收到. 解决方法
一个可能的答案:您确定客户端仅在60.2秒后收到文件吗?如果我没记错的话,file_get_contents()有一个讨厌的习惯,就是在它认为请求完成之前等待远程连接关闭.这意味着,如果您的服务器使用HTTP保持活动状态,一旦所有数据传输完成后,有效地保持连接一段时间,您的应用程序可能会挂起.
这样的事情有帮助吗? $context = stream_context_create(['http' => ['header' => 'Connection: closern']]); file_get_contents("https://example.com/some/path",false,$context); 注意:您可能需要使用“https”作为该阵列中的密钥;我不记得我的头脑了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |