Aşağıdaki HTML / PHP sayfam var:
<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>
<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>
Gördüğünüz gibi, form gönderilecek ve beklenen çıktı, içinde bir dolu dizi bulunan bir dizi içeren bir POST dizisi ve "Go" (düğme) değerine sahip bir "eylem" girişi içeriyor. Ancak, alanlara hangi değerleri girdiğim önemli değildir; sonuç her zaman:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
Her nasılsa, test adındaki dizi boşaltılır, "action" değişkeni bunu çözer.
POST alanlarının gönderilip gönderilmediğini kontrol etmek için Firefox için Live HTTP Başlıkları uzantısını kullandım. Live HTTP Başlıklarından gelen bilgiler (metin kutularında değerler olarak doldurulmuş a, b ve c ile):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
Bunun neden olduğu hakkında bir fikri olan var mı? Bunu korkutuyorum, bu bana çok zaman kazandırdı ...
Güncelleştirme:
Bunu farklı sunucularda, Windows kutularında, PHP sürüm 5.2.4 (Suhosin ile) ile Ubuntu sunucusunda çalıştığını denedik. Hatta Ubuntu ve aynı PHP sürümüyle farklı bir sunucuda, Suhosin yüklü olarak da çalışıyor.
İki dosyayı dağıttım, çıktı ( diff php.ini phps.ini
):
270c270
< memory_limit = 32M
---
> memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>
Bu phps.ini içinde çalıştığı sunucudan biridir ve php.ini şu ankidir. Burada sorun yokmuş gibi görünüyor, değil mi?