2017-03-25 4 views
0

Ich muss PHP verwenden, um eine große Zeichenfolge (6000 Zeichen) an einen Server zu buchen, die Zeichenfolge wird dynamisch in der PHP erstellt.php CURL Post große Zeichenfolge

$ch = curl_init('http://localhost:8080/mypost');                  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);  
$result = curl_exec($ch); 

Es funktioniert gut, wenn die data_string klein ist, aber sobald es über ein paar Tausend sein wird verkohlt es hängt. Kein Fehler in der PHP-Konsole, nur nicht fertig. Interessanterweise funktioniert es gut in Quercus PHP (das nicht libCurl verwendet, sondern seine eigene Implementierung), aber es funktioniert nicht in Standard-PHP (PHP 5.3.10-1ubuntu3.26). Ich muss es in Standard-PHP arbeiten lassen.

Der akzeptierende Server ist ein JVM-Grizzly-Server. Ich habe einen anderen Client in Java geschrieben und es funktioniert gut, die Strings zu posten, also glaube ich nicht, dass das Problem auf dem Server liegt.

Ich sah diesen Beitrag (https://forums.phpfreaks.com/topic/143602-long-string-passed-to-curl-postfields-not-getting-posted/), die vielversprechend scheint, aber konnte keine Lösung zum Arbeiten bekommen. mit diesem

+0

Wenn Sie angeben, 'CURLOPT_POSTFIELDS',' Post' wird standardmäßig angenommen. Entfernen Sie 'curl_setopt ($ ch, CURLOPT_CUSTOMREQUEST," POST ");' Funktioniert es? –

+0

nein, es hat nicht funktioniert, funktioniert immer noch in Quercus PHP obwohl – adamM

+0

Wenn Sie können, posten Sie die echte URL, damit wir es testen können. Sie können es später immer ersetzen. –

Antwort

0

die Größe Standardpuffer Erhöhen Sie die Option CURLOPT_BUFFERSIZE

Versuchen:

$ch = curl_init('http://localhost:8080/mypost');                  
curl_setopt($ch, CURLOPT_BUFFERSIZE, 84000); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);  
$result = curl_exec($ch);