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

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

Версия 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 on 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 on line 5

script выполняется от: 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
}

Ответы

Ответ 1

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

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

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

Ответ 2

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

$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.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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