Note: solution at the end
Ben 1024 karakterden uzun bir HTTP POST yapmak için çalışırsanız, başarısız olur. Neden? Burada en az bir örneği aşağıda verilmektedir:
recipient.php:
<?php
if (strlen(file_get_contents('php://input')) > 1000
|| strlen($HTTP_RAW_POST_DATA) > 1000) {
echo "This was a triumph.";
}
?>
sender.php:
<?php
function try_to_post($char_count) {
$url = 'http://gpx3quaa.joyent.us/test/recipient.php';
$post_data = str_repeat('x', $char_count);
$c = curl_init();
curl_setopt_array($c,
array( CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_CONNECTTIMEOUT => 999,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $post_data
)
);
$result = curl_exec($c);
echo "{$result}\n";
curl_close($c);
}
for ($i=1020;$i<1030;$i++) {
echo "Trying {$i} - ";
try_to_post($i);
}
?>
çıktı:
Trying 1020 - This was a triumph.
Trying 1021 - This was a triumph.
Trying 1022 - This was a triumph.
Trying 1023 - This was a triumph.
Trying 1024 - This was a triumph.
Trying 1025 -
Trying 1026 -
Trying 1027 -
Trying 1028 -
Trying 1029 -
yapılandırma:
PHP Version 5.2.6
libcurl/7.18.0 OpenSSL/0.9.8g zlib/1.2.3 libidn/1.8
lighttpd-1.4.19
Solution
CURL için aşağıdaki seçeneği ekleyin:
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:"));
HTTP başlık gönderilecek: "100-devam Expect", ve Lighttpd 1.4 * bunu desteklemiyor. Nedeni 1024 karakteri üzerinde herhangi POST neden olduğunu gibi görünüyor. Ben bunun için bir bilet bulundu: http://redmine.lighttpd.net/issues/show/1017
Onlar 1.5 çalışır söylüyorlar.