Может ли кто-нибудь объяснить, почему следующий код возвращает предупреждение:
<?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;
См .: 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
параметр 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');