PHP:file_get_contents():无法打开流错误 - 适用于测试XAMPP测试服务器,而不是实时

时间:2017-04-29 02:49:44

标签: php xml curl server file-get-contents

我正在为电影院创建一个PHP应用程序,当用户访问该应用程序时,它会获取外部XML文档,并将其保存到我们的服务器中。然后,该XML文件用于加载放映时间和其他电影信息。如果我们服务器上的文件超过15分钟,它将被覆盖,否则,它将加载现有文件。我已经完成了应用程序,它在我的XAMPP测试服务器上工作得很好,但它无法在实时服务器上运行。

外部XML文件位于以下网址:http://45502.formovietickets.com:2235/showtimes.xml。我正在尝试将文件保存到的服务器位于HostGator的基于Linux的服务器之一上。使用PHP的curl函数,我只能在XAMPP测试服务器上成功加载XML文件。在实时服务器上,它无法连接。

我觉得它可能是formovietickets.com服务器上的某种访问限制,但它背后的人坚持认为没有任何限制。有谁知道解决这个问题?

<?php

$url = 'http://45502.formovietickets.com:2235/showtimes.xml';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if(curl_exec($ch) === false) {
    echo 'Curl error: '.curl_error($ch);
} else {
    echo 'Retrieved file with no errors!';
}
curl_close($ch);

?>

我测试了什么?

  • 我尝试将php.ini文件从XAMPP传输到实时服务器,但仍然失败。
  • 我能够成功检索位于另一台外部服务器上的XML文件。
  • 我在基于Windows的服务器上测试了代码,问题仍然存在。

注意:如果您在不到15分钟内从相同的IP地址加载URL多次,您将收到错误消息“来自此IP地址的请求太多”。只是说如果你尝试测试它。

2 个答案:

答案 0 :(得分:1)

我的猜测是你的主机阻止对防火墙中2235等非标准端口的出站访问。如果是这种情况,你应该让他们打开那个港口,并希望他们愿意这样做。如果它们不是,那么您必须提出另一种解决方案来获取服务器上的文件,例如使用代理或将文件推送到服务器而不是获取它。

答案 1 :(得分:0)

您是否检查了/ etc / hosts文件,在Windows上它位于C:\ Windows \ System32 \ Drivers \ etc \ hosts,它可能导致formovietickets.com解析为不同的IP,并且它优先于DNS服务器,说到这个,尝试更改您的DNS服务器。