我有一个带有行的脚本:
$id = strtolower(implode('',file($ip_service . $ip)));
执行时,文件功能类似于文件(http://www.url.com/filename.php?119.160.120.38)
在服务器A上它工作正常但在服务器B上却出现以下错误:
file(http://www.url.com/filename.php?xxx.xxx.xxx.xxx) [function.file]: failed to open stream: Connection timed out in /home/path/filename.php on line 22
第22行是上面的代码行。
服务器A具有PHP 4.4.6,服务器B具有4.4.8
任何帮助都将受到高度赞赏。
答案 0 :(得分:4)
使用file()和/或file_get_contents()来访问互联网上的文件非常容易出错。例如,我不认为他们遵循重定向。超时时间也非常短,不是典型的网络超时。执行错误捕获以查看失败原因也很困难。 我总是使用CURL来访问网络上的文件。它需要更多的代码行,但更可靠。注意,您的设置中可能未安装PHP CURL支持。
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_URL, 'http://www.url.com/filename.php?119.160.120.38');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
if ( $result==false ) {
echo curl_errno($ch).' '.curl_error($ch);
}
curl_close($ch);
显然,如果出现错误,您会想要在错误消息旁边做一些事情。如果成功,$ result变量将包含文件的内容。
答案 1 :(得分:1)
您的服务器无法在给定时间段(20秒?30秒内)与托管www.url.com的服务器建立tcp / ip连接?默认值是什么或您指定为超时的内容。另一台服务器甚至没有主动拒绝连接,根本没有任何响应。可以是例如防火墙问题,其中部分或全部您或其他服务器的数据包以静默方式丢弃。