2016-04-21 15 views
0

Ich versuche, Dateiinhalte aus PHP-generierte Datei mit JSON-Daten zu erhalten.Json_decode, file_get_contents var_dump gibt NULL zurück

Json wurde bereits von jsonlint.com Website überprüft. Es ist gültig.

$result = file_get_contents("url"); 
var_dump(json_decode($result,true)); 

Nginx zeigt keine Fehler an.

Warum funktioniert es nicht? Json-Generator ist auf einem externen Server. Als ich es auf http://php.fnlist.com/php/json_decode Website eingefügt wurde es korrekt konvertiert.

+2

'var_dump' die Variable' $ result'. Vielleicht bekommst du nicht einmal den Inhalt von der URL. – rinukkusu

+1

'" url "' ist es real oder Sie übergeben einen gültigen Pfad einer Datei? –

+0

url ist nicht real url es ist nur für ein Beispiel eingefügt – Wojtokuba

Antwort

0

Auch wenn diese alte Frage ist, kann diese Antwort sein kann jemand helfen wenn das gleiche Problem auftritt.

Um dies zu umgehen, stellen Sie sicher, dass:

  1. allow_url_fopen ON ist, überprüfen Sie in php.ini Datei.
  2. url ist eine gültige URL. Um einige Issuer über das Übergeben der Variablen zu überspringen, können Sie http_build_query
  3. verwenden Rückkehr von Json ist gültig. Sie können überprüfen, ob die Rücksendung gültig ist mit jsonlint.com
  4. stream_context ist bereits so eingerichtet file_get_contents weiß, wie die Anfrage zu behandeln ist. Obwohl wir Daten über HTTPS setzen, müssen wir http context verwenden. Wir setzen method-PUT, Content-type-application/json, Accept zu application/json, Connection zu close und Content-length der Länge unserer JSON-String. Wir stellen diese Daten über HTTP1.1, also setzen wir auf 1.1. Wir senden den JSON in den Hauptteil der Anfrage, also legen wir dies im Inhalt fest. Und da wir HTTPS verwenden, müssen wir die ssl Einstellungen konfigurieren.

    $context = stream_context_create([ 'http' => [ 'method' => 'PUT', 'header' => "Content-type: application/json\r\n" . "Accept: application/json\r\n" . "Connection: close\r\n" . "Content-length: " . strlen($json_data) . "\r\n", 'protocol_version' => 1.1, 'content' => $json_data ], 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false ] ]);

setzen schließlich die Daten von file_get_contents wie dieser Aufruf:

$getData = file_get_contents($url, false, $context); 
$results = json_decode($getData, TRUE); 

Hopely nützlich, danke.