PHP file_get_contents()不起作用

时间:2012-09-06 06:26:09

标签: php codepad

任何人都可以解释为什么以下代码会返回警告:

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

请参阅codepad

6 个答案:

答案 0 :(得分: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;

请参阅:cURL

答案 1 :(得分: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

另见cURL

答案 2 :(得分:2)

这几乎可以肯定是由配置设置引起的,该设置允许PHP禁用使用文件处理功能打开URL的功能。

如果您可以更改PHP.ini,请尝试启用allow_url_fopen设置。另请参阅man page for fopen以获取更多信息(相同的引号影响所有文件处理函数)

如果您无法启用该标记,则需要使用其他方法(例如Curl)来读取您的网址。

答案 3 :(得分: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中运行上面的问题代码,那么它会打开谷歌页面。 因此,差异在于CodePad.org中禁用的http流,并在CodePad.Viper中启用。

要启用它,请阅读以下帖子How to enable HTTPS stream wrappers。或者使用cURL

答案 4 :(得分:-2)

在主机名后尝试使用尾部斜杠。

<?php
    echo file_get_contents("http://google.com/");
?>

答案 5 :(得分:-5)

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

file_get_contents('http://google.com');