PHP file_get_contents() не работает

Может кто-нибудь объяснить, почему следующий код возвращает предупреждение:

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

Смотри кодпад

6 ответов

В качестве альтернативы вы можете использовать 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

Попробуйте эту функцию вместо 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.

Установите cURL в Ubuntu (или другой unix-подобной операционной системе с aptitude):

sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart

Смотрите также CURL

Это почти наверняка вызвано настройкой конфигурации, которая позволяет 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');
Другие вопросы по тегам