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
опять же, помните о проблемах безопасности при использовании этой функции.
попробуйте эту функцию вместо 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");