2009-02-12 4 views
12

Я просто перенес проект с локального хоста на мой удаленный сервер и заметил, что некоторые из моих скриптов перестали работать. Самое главное - это то, что полагалось на 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 
} 
+0

В вашем журнале ошибок должна быть ошибка или что-то возвращено. Нужна дополнительная информация. –

+0

Yup. Ошибки были бы хороши. –

+0

Если new-data.php находится на том же сервере, что и скрипт, вызывающий его, почему вы не просто передаете ему путь, а не URL? –

ответ

18

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

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

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

+0

Теперь мы куда-то попадаем. Не удалось найти. – Sampson

+0

Вы можете получить доступ к * любому * сайту по имени с сервера? например. 'ping google.com'. Если нет, возможно, вам не хватает некоторых параметров сервера имен в файле /etc/resolv.conf. – bobince

+0

Так оно и было. Я просто должен был заменить URL-адрес IP-адресом. Благодарю. – Sampson

0

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

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

1

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

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

+0

Localhost (LH), новый хост (NH) и поставщик данных (DP). Это мои три машины. LH может получить данные из DP, но NH не может. Вы говорите, что мне нужно проверить/etc/hosts NH или DP? – Sampson

7

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

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

1

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

Смежные вопросы