PHP: file_get_contents ($ loc) не работает

Я просто перенес проект с localhost на мой удаленный сервер и заметил, что некоторые из моих скриптов перестали работать. Самое главное – это тот, который полагался на file_get_contents() для извлечения значений JSON из другого сценария.

Версия PHP – 5.2.4
allow_url_fopen включен

Предупреждение: file_get_contents() [function.file-get-contents] : php_network_getaddresses : getaddrinfo не удалось: имя или услуга, неизвестные в /var/www/html/2009/functions/functions.products.php в line 5

Предупреждение: file_get_contents(http://data.example.com/new-data.php) [function.file-get-contents] : не удалось открыть поток: Success in /var/www/html/2009/functions/functions.products.php в line 5

Сценарий запускается с: http://www.example.com
Место, переданное в функцию, – http://data.example.com/new-data.php

Примечание . Одно и то же имя домена, но два разных сервера.

 function getData() { $location = "http://data.mysite.com/new-data.php"; $contents = file_get_contents($location); $jsonVars = json_decode($contents); return $jsonVars } 

Имя или услуга неизвестны

DNS сломан. Можете ли вы ping data.mysite.com из оболочки на машине (если у вас есть)?

Попробуйте заменить data.mysite.com на фиксированный IP-адрес.

Также вы можете попробовать завиток:

 $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL, 'http://url.url'); $result = curl_exec($curl); curl_close($curl); 

И вы получаете то, что хотите в $result .

Посмотрите на свой / etc / hosts на удаленном сервере. Если он пуст, вам нужно добавить '127.0.0.1 localhost'.

Если это не одна из разновидностей VPS, где интерфейс loopback попадает на внешнюю машину; на них вам нужно использовать IP-номер VPS вместо 127.0.0.1.

Если вы уверены, что это не проблема DNS, попробуйте перезапустить Apache. Это разрешило это для меня после 20 минут царапин на голове.

Пожалуйста, добавьте дополнительную информацию, содержит ли содержимое $? Не забудьте сделать json_decode ($ contents, true), если вы хотите, чтобы он был как php-массив, иначе возвращался stdClass.

Может ли проблема решить имя хоста? является data.mysite.com той же машиной, что и mysite.com?