2016-03-20 11 views
2

Also, ich habe ein PHP-Skript, das ein großes JSON-Objekt sendet und das ist der Code, den ich dazu verwende.php curl post ein großes json-Objekt

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
curl_setopt($curl, CURLOPT_VERBOSE, true); 
$json_response = curl_exec($curl); 

Jetzt, wenn die Daten klein sind, geht die Anfrage reibungslos durch. Wenn das JSON-Objekt jedoch riesig wird, schlägt es plötzlich fehl, die Daten zu senden, und stattdessen wird "Content-Length: 0" in dem Anforderungsheader angezeigt, als ob es das Objekt nicht enthielt.

Ich gehe davon aus, dass es eine Grenze gibt, wie groß die Daten sein könnten. Gibt es eine Möglichkeit, das zu umgehen?

Ich habe nach ähnlichen Problemen gesucht und ich fand eine Lösung für das Senden von Dateien. Aber das Objekt, das ich hier habe, ist ein Resultset aus der Datenbank und daher würde ich es vorziehen, den Dateiansatz als letzten Ausweg zu behalten.

Danke.

+0

Der Server hat eine Grenze haben, wie viel große Daten Sie senden können. Und vielleicht überschreiten Sie diese Grenze. – Ikari

+0

Ich habe alle Grenzen in php.ini erhöht und das beinhaltet "memory_limit", "post_max_size", "max_input_time" und "max_execution_time". Gibt es etwas, das mir fehlt? – howrouja

+0

Ich sprach nicht über die Grenzen auf Ihrer Seite, sondern die Server-Seite, an die Sie senden. – Ikari

Antwort

0

Also im Grunde haben Sie die Httpheader schon, aber Ihnen fehlt die Content-length man es versuchen, wie so:

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-length:' . strlen($data))); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
curl_setopt($curl, CURLOPT_VERBOSE, true); 

$json_response = curl_exec($curl); 
+0

Dies setzt voraus, $ Daten ist bereits JSON-codiert, was es nicht ist. Ich denke, Sie müssen möglicherweise ein vollständiges Beispiel mit seinem gesamten Ausschnitt aus Gründen der Klarheit zeigen. – Sleavely

+0

oh yeah du hast Recht! Danke für den Vorschlag! @Sleavely –