【问题标题】:PHP: file_get_contents(): failed to open stream error - works on test XAMPP test server, not livePHP: file_get_contents(): failed to open stream 错误 - 在测试 XAMPP 测试服务器上工作,不是实时的
【发布时间】:2017-09-27 05:28:34
【问题描述】:

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

外部 XML 文件位于以下 URL: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 地址的请求过多”。只是说以防万一您尝试测试一下。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 2018-12-15
        • 2016-08-14
        • 2016-08-03
        • 2014-05-14
        相关资源
        最近更新 更多