json - curl_exec - 1 zu 1 in php datei speichern


klausi89

Erfahrenes Mitglied
#1
Hallo ich möchte gerne eine ausgelesene json in eine php datei speichern,

leider sind meine versuche mit file_put_contents erfolglos :-(

Vielleicht kann mir jemand sagen warum.....

PHP:
//API Url
$url = 'https://apiurl.com/?api_key=99999999888888777777';

//Initiate cURL.
$ch = curl_init($url);

//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

//Execute the request
$result = curl_exec($ch);
dazu hab ich dann schon mal folgendes probiert

PHP:
$file = 'test.php';
file_put_contents($file, $result);
die datei wird da zwar angelegt aber es steht nur eine 1 drin

P.S. echo $result; funktioniert einwandfrei
 

Sempervivum

Erfahrenes Mitglied
#2
Habe keine Ahnung von curl aber da dir sonst niemand antwortet, versuche ich es mal:
Habe deinen Code in eine Testdatei eingetragen. Leider kenne ich weder das gesendete JSON noch die URL, so dass ich die POST-Parameter weglassen musste und eine URL verwenden, die ich von früher hatte.
Ergebnis: Zunächst funktionierte der Abruf nicht weil diese URL ebenfalls https verwendete. Ich musste dieses hinzu fügen:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Gefunden hier:
Using cURL in PHP to access HTTPS (SSL/TLS) protected sites » unitstep.net
Dann funktionierte es und der JSON-String lässt sich problemlos speichern.
Bist Du sicher, dass die Daten erfolgreich zurück kommen?
Offenbar lässt sich die Ausgabe auch direkt in eine Datei speichern:
PHP: Grundlegende Nutzung - Manual
 

ComFreek

Mod | @comfreek
Moderator
#3
ch musste dieses hinzu fügen:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Gefunden hier:
Using cURL in PHP to access HTTPS (SSL/TLS) protected sites » unitstep.net
Ich würde stark davon abraten! Hiermit verschenkt man alle Vorteile, die HTTPS einem überhaupt bringt. Man könnte also gleich HTTP nehmen. Mit dem deaktivierten Zertifikatscheck kann sich jeder als jeden ausgeben.

Siehe How to update cURL CA bundle on RedHat?, wie man cURL so nutzen kann, dass es einen vorgegebenen Certificate Trust Store nutzt.
Einige Seiten empfehlen das Zertifikat einer Website via Browser manuell zu exportieren. Ich frage mich jedoch, wie es da mit Certificate Updates (etwa weil abgelaufen) oder Revocation aussieht.
 
Zuletzt bearbeitet:

klausi89

Erfahrenes Mitglied
#4
sry wegen der späten Antwort ich musste mal nen bissl ans Meer :) .... leider habe ich immer noch das Problem das einfach alles aus der Json data angezeigt wird, ich möchte es aber gerne genauso wie die daten ankommen in eine Datei ablegen. Mit dem oben genannten funktioniert es einfach nicht.

Die Datenabfrage funktioniert einwandfrei, und ist so auch im Einsatz und zeigt daten aus diesen json daten auf einer webseite und auch unterseiten an. Da der anbieter nun die api abfragen begrenzt möchte ich diese daten nun gerne in eine Datei speichern am besten 1 zu 1.....momentan wird jedes mal eine apiabfrage erzeugt wenn die webseite bzw. deren unterseiten aufgerufen werden. deshalb speichern in datei und per cron einmal täglich aktualisieren aber wie....:-( so wie oben funktioniert das nicht...
 
Zuletzt bearbeitet: