Berapa batas ukuran permintaan posting?

268

Maaf jika ini duplikat, saya pikir itu akan tetapi tidak dapat menemukan apa pun.

Saya memiliki aplikasi fleksibel yang mengirimkan data kembali ke server php / mysql via IE. Saya belum mengalami masalah, tetapi mengetahui ini sebelumnya mungkin menyelamatkan saya dari frustrasi dan pekerjaan. Apakah ada batasan ukuran untuk mengirim data melalui http?

Artikel ini mengatakan tidak: http://www.netlobo.com/ie_form_submit.html

Diskusi ini mengatakan ya: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

Dan semuanya berjalan bolak-balik apa yang dapat saya temukan online. Jadi tolong batasi jawaban untuk nomor yang diuji / diverifikasi secara pribadi.

Saya ingin memposting kembali string XML yang bisa cukup besar (katakanlah hingga 5MB).

Jika ada bedanya: browser akan selalu berupa IE (produk kami memerlukannya), posting berasal dari dan httpService dengan fleksibel, server web adalah php, DB adalah mySql.

invertedSpear
sumber

Jawaban:

203

Itu tergantung pada konfigurasi server. Jika Anda bekerja dengan PHP di Linux atau yang serupa, Anda dapat mengontrolnya menggunakan file konfigurasi .htaccess, seperti:

#set max post size
php_value post_max_size 20M

Dan, ya, saya pribadi bisa membuktikan fakta bahwa ini bekerja :)

Jika Anda menggunakan IIS, saya tidak tahu bagaimana Anda akan menetapkan nilai khusus ini.

inkedmn
sumber
3
Di mana post_max_sizepengaturan ini ? Saya agak baru mengenal php dan saya tidak dapat menemukannya di basis kode kami (menggunakan proses dreamWeaver find-all). Saya akan bertanya kepada sys admin kita tetapi mereka jahat. :-P
invertedSpear
10
Jadi bisakah Anda mengatur nilai ini ke ukuran berapa pun? Apakah tidak ada batasan protokol? Bisakah Anda atur ke 999999999999999999999M?
Para
8
@Para - Posting ini mengatakan bahwa Anda dapat mengaturnya setinggi memori mesin Anda. Ia juga mengatakan bahwa standarnya adalah 2MB.
RustyTheBoyRobot
37
Karena ini PHP, saya agak berharap untuk menerima nilai apa pun dan hanya SEGFAULT ketika sudah mencapai batas mesin Anda ....
RustyTheBoyRobot
12
Juga, dalam file PNP.INI terdapat pengaturan: max_input_vars yang dalam versi PHP saya: 5.4.16 default menjadi 1000. Dari manual: "Berapa banyak variabel input yang dapat diterima (batas diterapkan ke $ _DAPAT, $ _POST dan $ _COOKIE superglobal secara terpisah) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov
73

Bagian url dari permintaan (GET dan POST) dapat dibatasi oleh browser dan server - umumnya ukuran amannya adalah 2KB karena hampir tidak ada browser atau server yang menggunakan batas yang lebih kecil.

Tubuh permintaan (POST) biasanya * dibatasi oleh server berdasarkan ukuran byte untuk mencegah jenis serangan DoS (perhatikan bahwa ini berarti karakter yang melarikan diri dapat meningkatkan ukuran byte tubuh). Pengaturan server yang paling umum adalah 10MB, meskipun semua server populer memungkinkan ini ditingkatkan atau dikurangi melalui file pengaturan atau panel.

* Beberapa pengecualian ada pada ponsel yang lebih lama atau browser perangkat kecil lainnya - dalam hal ini lebih merupakan fungsi dari ruang tumpukan yang disediakan untuk tujuan ini pada perangkat daripada yang lain.

David
sumber
2
Katakan sesuatu tentang batas peramban, mengingatcurl
Yugal Jindle
12
Saya tahu saya sedikit ketinggalan zaman di sini tetapi jawaban seperti ini adalah alasan saya suka StackOverflow. Di atas dan di luar apa yang diperlukan dan memberikan beberapa informasi latar belakang yang berharga.
Asrama
14

Anda dapat memposting data dalam jumlah besar dengan mengatur variabel php.ini: max_input_vars Ukuran default dari variabel ini adalah 1000 tetapi jika Anda ingin mengirim sejumlah besar data, Anda harus menambah ukurannya. Jika Anda tidak dapat mengatur ukuran dari ini_set Anda harus melakukannya melalui htaccessatau dengan melakukan perubahan ke file php.ini secara langsung.

max_input_vars  2500
memory_limit    256M
Nilesh Chourasia
sumber
5

Seperti yang ditunjukkan David, saya akan menggunakan KB dalam banyak kasus.

php_value post_max_size 2KB

Catatan: formulir saya sederhana, hanya beberapa kotak teks, bukan teks panjang.

ChrisDeDavidMindflowAU
sumber
2

Secara default, permintaan posting memiliki ukuran maksimum 8mb. Tetapi Anda dapat memodifikasinya sesuai dengan kebutuhan Anda. Modifikasi dapat dilakukan dengan membuka file php.ini (pengaturan konfigurasi php).

Temukan

post_max_size=8M  //for me, that was on line:771

ganti 8 sesuai dengan kebutuhan Anda.

Muhammad Ashfaq
sumber
1

Terserah server http untuk memutuskan apakah ada batasan. Produk yang saya kerjakan memungkinkan admin untuk mengkonfigurasi batas.

Haha
sumber
Juga, dalam file PNP.INI terdapat pengaturan: max_input_vars yang dalam versi PHP saya: 5.4.16 default menjadi 1000. Dari manual: "Berapa banyak variabel input yang dapat diterima (batas diterapkan ke $ _DAPAT, $ _POST dan $ _COOKIE superglobal secara terpisah) "Ref .: [ php.net/manual/en/info.configuration.php#ini.max-input-vars[[1] [1]: php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikolay Ivanov
1

Salah satu solusi terbaik untuk ini, Anda tidak menggunakan beberapa atau lebih dari 1.000 bidang input. Anda dapat menggabungkan beberapa input dengan karakter khusus apa saja, misalnya. @.

Lihat ini:

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

Menggunakan skrip apa pun (JavaScript atau JScript),

document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

Dengan ini, Anda akan melewati max_input_varsmasalah. Jika Anda meningkatkan max_input_varsdalam file php.ini, itu berbahaya bagi server karena menggunakan lebih banyak memori cache server, dan ini kadang-kadang dapat menyebabkan crash server.

harpej
sumber
1
Saya tidak melihat bagaimana penggabungan variabel menghemat memori. Setiap ASCII-Character menggunakan memori 1 byte. Sebuah string (secara teknis sebuah array char jika saya tidak salah) menggunakan n * 1 byte dengan n sebagai panjang string. Mengapa menambahkan karakter lain mengurangi memori yang digunakan? Dalam perhitungan ini Anda akan menambahkan byte lain untuk setiap '@' yang Anda tambahkan ke string. Tentu saja Anda mengurangi jumlah variabel yang digunakan, tetapi Anda membayar "menang" ini dengan kerja ekstra membelah mereka lagi.
DBX12
2
@ DBX12 Meskipun Anda tidak menghemat memori dengan trik ini, Anda dapat mem-bypass max_input_varsopsi php.inidengan ini. Tidak persis, apa yang diminta, tetapi masih bermanfaat.
RicoBrassers
Batas ukuran melebihi tergantung pada dua faktor: pertama, ukuran kunci individu / ukuran string nilai, yaitu jumlah karakter dalam kunci dan / atau sisi nilai. kedua, jumlah pasangan kunci / nilai, meskipun setiap pasangan memiliki jumlah karakter yang kecil. Secara keseluruhan dua faktor di atas berakhir dengan batas ukuran melebihi masalah. Jadi, bagi saya, jawaban ini benar dan terkait dengan pertanyaan dan menyoroti satu sisi masalah.
Elnur Shabanov
0

Untuk pengembang yang tidak dapat mengubah konfigurasi php karena webhosting. (Pengaturan saya ukuran maksimum 256MB, 1000 variabel maks)

Saya mendapat masalah yang sama bahwa hanya 2 dari 5 objek data besar (array asosiatif) dengan substruktur diterima di sisi server.

Saya mengetahui bahwa seluruh substruktur sedang "diratakan" dalam permintaan pos. Jadi, satu objek menjadi ratusan variabel literal. Pada akhirnya, alih-alih 5 variabel Objek, pada kenyataannya mengirim puluhan ratusan variabel elemen.

Solusi dalam hal ini adalah membuat serial setiap substruktur menjadi String. Kemudian diterima di server sebagai 5 variabel String. Contoh: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Mira Nedved
sumber