PHP-файл get contents не работает на localhost

Я работаю на своем веб-сайте с localhost (http://172.16.65.1/) сервер MAMP на OSX.
Я хочу загрузить JSON из Google, и некоторые простые тесты показывают, что у меня есть проблема..

echo file_get_contents("http://www.google.com"); // FAILS
// PHP log: [07-Dec-2011 23:09:21] PHP Warning:  file_get_contents(http://www.google.com) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: Host is down in /Applications/MAMP/htdocs/-tests/get-json.php on line 3
echo file_get_contents("http://www.yahoo.com"); // FAILS

// echo file_get_contents("http://localhost"); // WORKS
// echo file_get_contents("http://172.16.65.1/"); // WORKS - My MAMP server

что я могу с этим поделать? Он отлично работает на моем сервере host providers.

6 ответов


из документации file_get_contents:

URL можно использовать в качестве имени файла с этой функцией, если включены оболочки fopen. Дополнительные сведения об указании имени файла см. В разделе fopen (). См.поддерживаемые протоколы и оболочки для ссылок на информацию о том, какие возможности имеют различные оболочки, заметки об их использовании и информацию о любых предопределенных переменных, которые они могут предоставить.

Регистрация php.ini так allow_url_fopen установлено значение on.

EDIT:

Я не заметил, что вы действительно можете использовать file_get_contents локально, поэтому теперь я думаю, что это может иметь какое-то отношение к вашему firewall settings.

кроме того, попробуйте установить user_agent в своем php.ini если еще не сделано.


вам также необходимо зарегистрироваться

extension = php_openssl.dll

включен или нет, если нет, то просто включите это, удалив; знак

allow_url_fopen = on

Это может быть настройка в вашем php.ini-файл. Существует параметр allow_url_fopen, который включает / отключает возможность открытия удаленных файлов с php. По соображениям безопасности это обычно по умолчанию отключено. Вы можете включить его в ваш PHP.ini добавив следующую строку:

allow_url_fopen = 1

опять же, помните о проблемах безопасности при использовании этой функции.

http://php.net/manual/en/filesystem.configuration.php


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


во втором вы пытаетесь открыть файл с именем localhost в текущей папке, которая не существует и, следовательно, выдает ошибку. Использовать http://localhost вместо. И чтобы это сработало, вы должны установить allow_furl_open.


Я был с помощью функции file_get_contents таким образом: file_get_contents("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$screenname."&count=5");

и это не работало, поэтому я изменил https на http, и после этого он работает хорошо.

file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$screenname."&count=5");