2016-12-01 3 views
2

Ich versuche json Daten aus der URL in eine file.I zu speichern sind immer Fehler wieSchreiben json Daten in der Datei mit curl

„Kann nicht JSON zu retten‚result.txt‘.“ Ich habe folgenden Code geschrieben, bitte helfen Sie mir

<?php 

$outfile= 'result.txt'; 

$url='http://192.178.1.5:8888/GetUsers'; 

$rCURL = curl_init(); 

curl_setopt($rCURL, CURLOPT_URL, $url); 
curl_setopt($rCURL, CURLOPT_HEADER, 0); 
curl_setopt($rCURL, CURLOPT_RETURNTRANSFER, 1); 

$aData = curl_exec($rCURL); 

curl_close($rCURL); 

$result = json_decode ($aData); 
if($result) { 
    if(file_put_contents($outfile, $result, FILE_APPEND)) { 
     echo "Saved JSON fetched from “{$url}” as “{$outfile}”."; 
    } 
    else { 
     echo "Unable to save JSON to “{$outfile}”."; 
    } 
} 
else { 
    echo "Unable to fetch JSON from “{$url}”."; 
} 


?> 
+1

Ist die Datei schreibbar? Gib es chmod perm 755 Ich denke, –

+1

überprüfen Sie Ihr PHP-Fehlerprotokoll, um Fehler zu verfolgen. –

+0

Sie übergeben ein Objekt an 'file_put_contents'. Das ist nicht erlaubt. Es verursacht keinen Fehler, aber die Funktion gibt 'false' zurück. Sehen Sie meine Antwort für weitere Details ... – Paolo

Antwort

0

speichern die Daten ohne json_decode. Obwohl http://php.net/manual/en/function.file-put-contents.php sagt, dass Daten Array sein können, gab es mir Fehler beim Arbeiten mit Array, sondern speichern Sie die Daten als String.

+0

Speichern von Daten ohne json_decode zeigt, dass "Saved JSON abgerufen von" http://192.178.1.5:8888/GetUsers "als" result.txt "." aber in result.txt Datei bekomme ich { "Fehler": "Methode nicht erlaubt" } warum das ?? – likasi

+0

das ist, was aus Ihrer Curl-Antwort kam. Ihre Datei funktioniert einwandfrei, jetzt müssen Sie sicherstellen, dass Ihr Anruf korrekt ist. –

+0

'curl_setopt ($ rCURL, CURLOPT_HTTPHEADER, ['Übernehmen: application/json', 'Content-Type: application/json']);' versuche diese Option nach 'CURLOPT_HEADER' zu setzen –

0

Versuchen Sie dies, verwenden Sie file_get_contents. es wird Stift der Inhalt der Datei vorhandenen erhalten

$result = json_decode ($aData); 
$current = file_get_contents($outfile); 
if($result) { 
    if(file_put_contents($outfile, $result)) { 
     echo "Saved JSON fetched from {$url} as {$outfile}."; 
    } 
    else { 
     echo "Unable to save JSON to {$outfile}."; 
    } 
} 
else { 
    echo "Unable to fetch JSON from {$url}."; 
} 
+0

Funktioniert nicht in meinem Fall.Auszeige Kann JSON nicht nur in "result.txt" speichern. – likasi

0

Entsprechend Ihrem Code Sie überprüfen müssen, ist Ihre Datei beschreibbar:

if (!is_writable($outfile)) { 
    throw new \RuntimeException("$outfile is not writable."); 
} 

Sie sollten vor file_put_contents diesen Code setzen.

0

Ich sehe einige wichtige Fragen mit Ihrem Code:

$result = json_decode ($aData); 

vorausgesetzt $aData enthält gültige ein JSON-Objekt $result wird ein Objekt sein.

Sie können kein Objekt an file_put_contents übergeben, da diese Funktion nur eine Zeichenfolge (oder ein eindimensionales Array) akzeptiert. Wenn Sie dies versuchen, gibt die Funktion false zurück.

Angenommen, Sie rufen JSON-Daten mit dem Curl-Aufruf ab. Ich sehe keinen Sinn darin, sie in ein Objekt zu dekodieren. Schreiben Sie einfach die Zeichenfolge von curl$aData in die Datei.

Es sei denn natürlich, Sie müssen einige Daten manipulieren.

In diesem Fall mangle die Daten, aber am Ende müssen Sie eine Zeichenfolge vor dem Schreiben in die Datei erzeugen.


Angenommen, Sie das oben genannte Problem zu beheben, lassen $result ein String sein.

Sie haben:

if(file_put_contents($outfile, $result, FILE_APPEND)) 

Da die Funktion die Anzahl der geschriebenen Bytes zurückgibt und $result unter der Annahme, kann ein leerer String sein die if Klausel wie folgt umgeschrieben werden sollte ...

if(file_put_contents($outfile, $result, FILE_APPEND) !== false) 

.. ., um die "Operation erfolgreich" Code-Block eingeben, wenn Sie eine leere Zeichenfolge in die Datei schreiben.


Als letzte Anmerkung muss natürlich die Datei beschreibbar sein.


EDIT

las ich in den Kommentaren, dass die Antwort von curl

{ "Error": "Method not allowed" } 

Dies ist, weil Sie den curl Anruf nicht tun sind als der Ziel-Server erwartet.

Method not allowed bedeutet, dass Sie zum Beispiel eine GET Anfrage stellen, während der Server eine POST für diesen Endpunkt erwartet.