Я работаю на своем сайте с 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
Что я могу сделать по этому поводу? Он отлично работает на сервере хост-провайдеров.
Из документации для file_get_contents
:
URL-адрес может использоваться как имя файла с этой функцией, если обертки fopen включены. См. Fopen () для получения дополнительной информации о том, как указать имя файла. См. Поддерживаемые протоколы и обертки для ссылок на информацию о том, какие способности могут иметь различные обертки, заметки об их использовании и информация о любых предопределенных переменных, которые они могут предоставить.
Проверьте свой php.ini
поэтому allow_url_fopen
установлен в on
.
РЕДАКТИРОВАТЬ:
Я не заметил, что вы на самом деле можете использовать file_get_contents
локально, так что теперь я думаю, что это может иметь какое-то отношение к вашим firewall settings
.
Кроме того, попробуйте установить user_agent
в php.ini
если это еще не сделано.
Вам также нужно проверить файл 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");