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');