2009-02-12 14 views
12

Ich habe gerade ein Projekt von localhost auf meinen Remote-Server verschoben, und bemerkte, dass einige meiner Skripte nicht mehr funktionierten. Am wichtigsten war eine, die sich auf file_get_contents() verließ, um JSON-Werte von einem anderen Skript zu holen.

PHP Version ist 5.2.4
allow_url_fopen ist ON

Warnung: file_get_contents()[function.file-get-contents]: php_network_getaddresses: getaddrinfo fehlgeschlagen: Name oder eine Dienstleistung nicht in /var/www/html/2009/functions/functions.products.php auf line 5 bekannt

Warnung: file_get_contents(http://data.example.com/new-data.php) [function.file-get-contents]: failed Strom zu öffnen: Success in /var/www/html/2009/functions/functions.products.php auf line 5

Das Skript wird lief aus: http://www.example.com
Die Lage in der Funktion übergeben ist http://data.example.com/new-data.php

Hinweis: Same Domain-Namen, aber zwei verschiedene Server.

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

Es muss ein Fehler in Ihrem Fehlerprotokoll irgendwo oder etwas zurückgegeben werden. Brauchen Sie mehr Informationen. –

+0

Yup. Fehler wären nett. –

+0

Wenn sich die Datei new-data.php auf demselben Server befindet wie das Skript, das sie aufruft, warum geben Sie dann nicht einfach den Pfad, sondern eine URL an den Server weiter? –

Antwort

18

oder Dienst nicht bekannt

DNS ist pleite. Können Sie ping data.mysite.com von einer Shell auf der Maschine (vorausgesetzt, Sie haben eine)?

Try data.mysite.com mit einer festen IP-Adresse für jetzt ersetzen.

+0

Jetzt kommen wir irgendwohin. Konnte es nicht finden. – Sampson

+0

Können Sie vom Server aus auf eine * beliebige * Site zugreifen? z.B. 'ping google.com'. Wenn nicht, fehlen wahrscheinlich einige Nameserver-Einstellungen in /etc/resolv.conf. – bobince

+0

Das war es. Ich musste nur die URL durch die IP-Adresse ersetzen. Vielen Dank. – Sampson

0

Bitte geben Sie weitere Informationen an, enthält $ Inhalt irgendetwas? Denken Sie daran, json_decode ($ contents, true) zu verwenden, wenn Sie es als PHP-Array haben wollen, andernfalls wird es eine stdClass zurückgegeben.

Könnte es ein Problem haben, den Hostnamen aufzulösen? ist data.mysite.com die gleiche Maschine wie mysite.com?

1

Betrachten Sie Ihre/etc/hosts auf dem Remote-Server. Wenn es leer ist, müssen Sie "127.0.0.1 localhost" hinzufügen.

Es sei denn, es ist eine der Sorten von VPS, wo die Loopback-Schnittstelle die äußere Maschine trifft; Auf diesen müssen Sie die IP-Nummer Ihres VPS anstelle von 127.0.0.1 verwenden.

+0

Localhost (LH), neuer Host (NH) und Datenanbieter (DP). Das sind meine drei beteiligten Maschinen. LH könnte die Daten von DP bekommen, aber NH nicht. Willst du sagen, ich muss/etc/Hosts von NH oder DP überprüfen? – Sampson

7

Sie können auch versuchen, curl:

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

Und Sie bekommen, was Sie in $result wollen.

1

Wenn Sie sicher sind, dass es sich nicht um ein DNS-Problem handelt, starten Sie Apache neu. Dies löste es für mich nach 20 Minuten Kopfkratzen.