【问题标题】:file_get_contents and curl not working via php but working on CLIfile_get_contents 和 curl 不能通过 php 工作,但可以在 CLI 上工作
【发布时间】:2017-08-04 19:25:27
【问题描述】:

当我使用带有 url(http://example.com 或其他)的 file_get_contents 时,它会在不同的上下文、user_agent 等下返回 false:

file_get_contents(http://example.com):failed 打开流:操作 失败

但是,当我们将 file_get_contents() 用于本地文件时,它可以工作。但是当我们尝试通过http访问任何文件时,它会显示上述错误。

我尝试使用 cURL 进行相同操作,但出现以下错误:

cURL 错误 (7):无法连接到主机

根据stackoverflow上的一些解决方案,我们在php.ini文件中更改了这个设置:

ini_set('allow_url_fopen', 1);

在包含 snoopy class.php 后我也使用了 snoopy 库

require "Snoopy/Snoopy.class.php";
$snoopy = new $Snoopy; 
fetchtext("http://example.com");
$text = $snoopy->results;

它也给出了一个空的响应。

如果我使用终端 cURL 或 wget 相同的 URL,它会完美运行。但是当文件不是本地文件(通过 HTTP)时,它在 PHP 代码中不起作用。

服务器详情:

Debian GNU/Linux 7.6 (wheezy)

Apache/2.2.22 (Debian)

PHP 5.4.45-0+deb7u7

【问题讨论】:

    标签: php linux apache curl debian


    【解决方案1】:

    您的代码中存在错误,这可能是问题所在:

    fetchtext("http://"google.com");
    

    应该是:

    fetchtext("https://www.google.com");
    

    (Google 使用 HTTPS,并且始终重定向到 www 子域)。

    您是否检查过您尝试查询的 URL 是否有效(即结构、特殊字符的转义)?如果你能提供一个你想要调用的真实 URL,那真的很有帮助。

    【讨论】:

    • 这只是一个例子。我们尝试了几个(非 https)域。还是不行。
    • 你能给出一个真实的 URL 来测试吗?
    • 这可能就是问题所在。您尝试访问的 URL 是否可以通过其他方式(即浏览器、命令行 curl 等)访问?并且您正在运行代码的服务器是否能够访问您的本地网络。
    • 如果您阅读整个问题,您会发现我们已经尝试通过命令行 curl 和 wget 访问它。它就是这样工作的。但不是在php代码中。
    • 你的说法没有意义:If I cURL or wget the same URL using terminal, it works perfectly. But it doesn't work in the PHP code when the file is not local (through HTTP). 这是否意味着 curl / wget 没有使用 HTTP?
    【解决方案2】:

    关于从哪里运行 php 文件(apache 或命令行),检查两个 php.ini 文件上是否有 allow_url_fopen = On: /etc/php5/cli/php.ini /etc/php5/apache2/php.ini

    【讨论】:

      【解决方案3】:

      在 Debian 中,会有一个组 aid_inet。 Apache 应该是该组的成员以允许访问网络。

      运行以下命令获取 apache 用户。在我的机器中,它的 www-data

      cat /etc/passwd
      

      尝试使用此命令将 apache 用户添加到 aid_inet 组中。

      usermod -a -G aid_inet www-data
      

      [注意:如果你有不同的 apache 用户,请使用你自己的]

      现在,再次运行您的 php 代码进行测试。它应该可以工作。

      【讨论】:

      • 感谢您的宝贵建议。它运作良好,由于它和您的支持,我的问题现在得到了解决。再次感谢您
      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2013-05-05
      相关资源
      最近更新 更多