谁能解释为什么以下代码返回警告:
<?php
echo file_get_contents("http://google.com");
?>
我收到警告:
Warning: file_get_contents(http://google.com):
failed to open stream: No such file or directory on line 2
见键盘
作为替代方案,您可以使用 cURL,例如:
$url = "http://www.google.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
参见:卷曲
试试这个函数代替 file_get_contents():
<?php
function curl_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
它可以像 file_get_contents() 一样使用,但使用 cURL。
在 Ubuntu(或其他具有 aptitude 的类 unix 操作系统)上安装 cURL:
sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart
另请参阅卷曲
这几乎肯定是由允许 PHP 禁用使用文件处理函数打开 URL 的能力的配置设置引起的。
如果您可以更改 PHP.ini,请尝试打开allow_url_fopen
设置。另请参阅fopen 的手册页以获取更多信息(相同的限制会影响所有文件处理功能)
如果您无法打开该标志,则需要使用其他方法(例如 Curl)来读取您的 URL。
如果您运行此代码:
<?php
print_r(stream_get_wrappers());
?>
在http://codepad.org/NHMjzO5p中,您会看到以下数组:
Array
(
[0] => php
[1] => file
[2] => data
)
在 Codepad.Viper - http://codepad.viper-7.com/lYKihI上运行相同的代码,您将看到 http 流已启用,因此file_get_contents
在 codepad.org 中不起作用。
Array
(
[0] => https
[1] => ftps
[2] => compress.zlib
[3] => php
[4] => file
[5] => glob
[6] => data
[7] => http
[8] => ftp
[9] => phar
)
如果您在 Codepad.Viper 中运行上面的问题代码,那么它会打开 google 页面。因此,区别http
在于 CodePad.org 中禁用并在 CodePad.Viper 中启用的流。
要启用它,请阅读以下文章如何启用 HTTPS 流包装器。或者使用cURL
.
尝试在主机名后面加上斜杠。
<?php
echo file_get_contents("http://google.com/");
?>
您可以尝试使用这样的单引号:
file_get_contents('http://google.com');