【问题标题】:PHP5 giving failed to open stream: HTTP request failed error when using fopenPHP5 无法打开流:使用 fopen 时出现 HTTP 请求失败错误
【发布时间】:2011-01-05 20:20:25
【问题描述】:

这个问题似乎过去在google和here上到处都在讨论过,但我还没有找到解决方案。

一个非常简单的 fopen 给了我一个

PHP 警告:fopen(http://www.google.ca):打开流失败:HTTP 请求失败!”。

我获取的 URL 并不重要,因为即使我获取 http://www.google.com 它也不起作用。完全相同的脚本适用于不同的服务器。失败的一个是 Ubuntu 10.04 和 PHP 5.3.2。这在我的脚本中不是问题,它在我的服务器中有所不同,或者它可能是 PHP 中的错误。

我尝试在 php.ini 中使用 user_agent 但没有成功。我的 allow_url_fopen 设置为 On。

如果您有任何想法,请随意!

【问题讨论】:

  • 你能从命令行做一个wget http://www.google.ca 吗? fopen() 没有提供更多错误信息吗?
  • 你能做 fopen('173.194.43.104') 吗? (那是 google.ca 的 ip)也许该服务器上的 PHP 无法访问 DSN?
  • @Pekka 是的,这样我可以毫无问题
  • @Viper_Sb:没有区别 DNS​​ 工作正常,其他一切正常,我可以 wget 或 lynx 到网络服务器,它只是 fopen
  • 这就是为什么我说 PHP 可能无法访问它,它可能工作得很好但 PHP 无法访问它。

标签: php fopen


【解决方案1】:

听起来您的配置不允许使用文件功能,由于安全问题,这在当今很常见。如果您有可用的 cURL 库,我建议您尝试一下。

PHP: cURL

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.ca/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$file = curl_exec($ch);
curl_close($ch);

echo $file;

【讨论】:

  • 使用phpinfo(); 行创建一个测试PHP 文件。搜索“curl”并查看它是否已启用。
  • 好的,我看到你编辑了你的帖子,那个版本正在运行,我会在我的脚本中试试。
  • @mickey 如果这在您的脚本中对您有用,请继续接受这个答案!
  • 仍在尝试解决...我宁愿找到解决 fopen 函数无法正常工作的原因,因为我有很多脚本使用此函数。
【解决方案2】:

检查您的 php.ini 配置是否设置为允许 fopen 打开外部 URL:

allow_url_fopen "1"

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

【讨论】:

  • 在我的 Ubuntu 安装中默认设置为“开启”
【解决方案3】:

我完全不确定这是否是问题所在,但我知道过去我在使用 fopen 打开 URL 时遇到过问题,通常是由于 php.ini 的 allow_url_fopen 或其他未知的安全设置

您可能想在 PHP 中尝试cURL,这通常对我有用,您可以通过谷歌搜索很容易找到一个示例。

【讨论】:

【解决方案4】:

检查您的 phpinfo 输出 - http 是否存在于 Registered PHP Streams 下?

【讨论】:

  • https、ftps、compress.zlib、compress.bzip2、php、文件、glob、数据、http、ftp、phar、zip
【解决方案5】:

您是否收到“HTTP 请求失败”而没有更多详细信息?套接字超时可能已过期。这默认为 60 秒。见:http://php.net/manual/en/function.socket-set-timeout.php

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2012-12-31
    相关资源
    最近更新 更多