4

谁能解释为什么以下代码返回警告:

<?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

键盘

4

6 回答 6

11

作为替代方案,您可以使用 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;

参见:卷曲

于 2012-09-06T06:39:00.270 回答
4

试试这个函数代替 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

另请参阅卷曲

于 2014-07-11T22:55:39.383 回答
2

这几乎肯定是由允许 PHP 禁用使用文件处理函数打开 URL 的能力的配置设置引起的。

如果您可以更改 PHP.ini,请尝试打开allow_url_fopen设置。另请参阅fopen 的手册页以获取更多信息(相同的限制会影响所有文件处理功能)

如果您无法打开该标志,则需要使用其他方法(例如 Curl)来读取您的 URL。

于 2012-09-06T06:30:20.897 回答
1

如果您运行此代码:

<?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.

于 2012-09-06T06:50:15.270 回答
-2

尝试在主机名后面加上斜杠。

<?php
    echo file_get_contents("http://google.com/");
?>
于 2016-08-03T08:38:18.173 回答
-5

您可以尝试使用这样的单引号:

file_get_contents('http://google.com');
于 2015-01-24T10:24:56.273 回答