关于php:PHP5提供打开流失败:使用fopen时HTTP请求失败错误

PHP5 giving failed to open stream: HTTP request failed error when using fopen

这个问题似乎过去在Google和此处的所有地方都曾讨论过,但我还没有找到解决方法。

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

PHP Warning: fopen(http://www.google.ca): failed to open stream: HTTP request failed!".

我获取的URL不重要,因为即使我获取http://www.google.com,该URL也无法使用。完全相同的脚本可在其他服务器上运行。一个失败的是Ubuntu 10.04和PHP 5.3.2。这不是我的脚本中的问题,它与服务器中的内容有所不同,或者可能是PHP中的错误。

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

如果您有任何想法,请放心!


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

PHP:cURL

1
2
3
4
5
6
7
$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;


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

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


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

1
allow_url_fopen"1"

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


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


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