ขีด จำกัด ขนาดของคำขอโพสต์คือเท่าใด


268

ขออภัยถ้ามันซ้ำกันฉันจะคิดว่ามันคงเป็น แต่ไม่พบอะไรเลย

ฉันมีแอพพลิเคชั่นเฟล็กซ์ที่ฉันโพสต์ข้อมูลกลับไปยังเซิร์ฟเวอร์ php / mysql ผ่าน IE ฉันยังไม่พบปัญหาใด ๆ แต่การรู้ล่วงหน้าก่อนหน้านี้อาจช่วยให้ฉันรู้สึกหงุดหงิดและทำงานได้ มีการ จำกัด ขนาดการโพสต์ข้อมูลผ่าน http หรือไม่

บทความนี้บอกว่าไม่มี: http://www.netlobo.com/ie_form_submit.html

การสนทนานี้บอกว่าใช่: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

และทั้งหมดกลับไปมาสิ่งที่ฉันสามารถหาได้ทางออนไลน์ ดังนั้นโปรดจำกัด คำตอบสำหรับหมายเลขทดสอบ / ตรวจสอบส่วนตัว

ฉันต้องการโพสต์กลับสตริง XML ที่อาจมีขนาดใหญ่มาก (พูดได้ถึง 5mb)

หากสร้างความแตกต่างใด ๆ : เบราว์เซอร์จะเป็น IE เสมอ (ผลิตภัณฑ์ของเราต้องการ) โพสต์มาจากและ httpService แบบยืดหยุ่นเว็บเซิร์ฟเวอร์คือ php, DB คือ mySql


คำตอบ:


203

มันขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์ หากคุณทำงานกับ PHP ภายใต้ Linux หรือที่คล้ายกันคุณสามารถควบคุมได้โดยใช้ไฟล์การกำหนดค่า. htaccess เช่น:

#set max post size
php_value post_max_size 20M

และใช่ฉันสามารถยืนยันถึงความจริงที่ว่าสิ่งนี้ได้ผลเป็นการส่วนตัว :)

หากคุณใช้ IIS ฉันไม่รู้ว่าคุณจะตั้งค่านี้ได้อย่างไร


3
post_max_sizeการตั้งค่านี้อยู่ที่ไหน ฉันค่อนข้างใหม่กับ php และฉันไม่สามารถค้นหาได้ทุกที่ในฐานรหัสของเรา (ใช้กระบวนการค้นหา dreamweaver ทั้งหมด) ฉันขอผู้ดูแลระบบของเรา แต่พวกเขาหมายถึง :-P
invertedSpear

10
ดังนั้นคุณสามารถตั้งค่านี้เป็นขนาดใดก็ได้ ไม่มีข้อ จำกัด ของโปรโตคอลใด ๆ คุณสามารถตั้งค่าเป็น 999999999999999999999M ได้ไหม
พิทักษ์

8
@Para - โพสต์นี้บอกว่าคุณสามารถตั้งค่าได้สูงเท่ากับหน่วยความจำของเครื่อง นอกจากนี้ยังบอกว่าค่าเริ่มต้นคือ 2MB
RustyTheBoyRobot

37
เนื่องจากนี่คือ PHP ฉันจึงคาดหวังให้ยอมรับค่าใด ๆ และเพียงแค่ SEGFAULT เมื่อถึงขีด จำกัด ของเครื่องของคุณ ....
RustyTheBoyRobot

12
นอกจากนี้ในไฟล์ PNP.INI มีการตั้งค่า: max_input_vars ซึ่งในเวอร์ชัน PHP ของฉัน: 5.4.16 มีค่าเริ่มต้นที่ 1,000 จากคู่มือ: "อาจยอมรับตัวแปรอินพุตจำนวนเท่าใด (จำกัด ให้ใช้กับ $ _GET, $ _POST และ $ _COOKIE superglobal แยกต่างหาก) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov

73

ส่วน URL ของคำขอ (GET และ POST) สามารถถูก จำกัด โดยทั้งเบราว์เซอร์และเซิร์ฟเวอร์ - โดยทั่วไปขนาดที่ปลอดภัยคือ 2KB เนื่องจากแทบไม่มีเบราว์เซอร์หรือเซิร์ฟเวอร์ที่ใช้ขีด จำกัด น้อยกว่า

โดยทั่วไปเนื้อความของคำขอ (POST) จะถูก จำกัด โดยเซิร์ฟเวอร์ตามขนาดไบต์เพื่อป้องกันประเภทของการโจมตี DoS (โปรดทราบว่านี่หมายถึงการหลีกเลี่ยงอักขระสามารถเพิ่มขนาดไบต์ของร่างกาย) การตั้งค่าเซิร์ฟเวอร์ที่พบมากที่สุดคือ 10MB แม้ว่าเซิร์ฟเวอร์ยอดนิยมทั้งหมดจะอนุญาตให้เพิ่มหรือลดผ่านไฟล์การตั้งค่าหรือแผงควบคุม

* มีข้อยกเว้นบางอย่างสำหรับโทรศัพท์มือถือรุ่นเก่าหรือเบราว์เซอร์อุปกรณ์ขนาดเล็กอื่น ๆ - ในกรณีเหล่านี้จะมีฟังก์ชั่นของฮีปพื้นที่สงวนไว้สำหรับวัตถุประสงค์นี้บนอุปกรณ์มากกว่าสิ่งอื่นใด


2
บอกบางสิ่งเกี่ยวกับขีด จำกัด ของเบราว์เซอร์โดยพิจารณาcurl
Yugal Jindle

12
ฉันรู้ว่าฉันไม่ทันไรก็ตามที่นี่ แต่คำตอบเช่นนี้คือเหตุผลที่ฉันชอบ StackOverflow เหนือกว่าสิ่งที่จำเป็นและให้ข้อมูลพื้นฐานที่มีค่า
Dormouse

50

นอกจากนี้ในไฟล์ PHP.INI ยังมีการตั้งค่า:

max_input_vars

ซึ่งใน PHP เวอร์ชันของฉัน: 5.4.16 มีค่าเริ่มต้นที่ 1,000

จากคู่มือ: "อาจยอมรับตัวแปรอินพุตกี่ตัว (จำกัด การใช้กับ $ _GET, $ _POST และ $ _COOKIE superglobal แยกต่างหาก)"

Ref .: http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars


14

คุณสามารถโพสต์ข้อมูลจำนวนมากได้โดยการตั้งค่าตัวแปร php.ini: max_input_vars ขนาดเริ่มต้นของตัวแปรนี้คือ 1,000 แต่ถ้าคุณต้องการส่งข้อมูลจำนวนมากคุณต้องเพิ่มขนาดให้เหมาะสม หากคุณไม่สามารถตั้งค่าขนาดจาก ini_set คุณต้องทำผ่านhtaccessหรือโดยการเปลี่ยนแปลงลงในไฟล์ php.ini โดยตรง

max_input_vars  2500
memory_limit    256M

5

อย่างที่เดวิดชี้ฉันจะไปกับ KB ในกรณีส่วนใหญ่

php_value post_max_size 2KB

หมายเหตุ: แบบฟอร์มของฉันเรียบง่ายเพียงไม่กี่กล่องข้อความไม่ยาว


2

โดยค่าเริ่มต้นคำขอโพสต์มีขนาดสูงสุด 8mb แต่คุณสามารถปรับเปลี่ยนได้ตามความต้องการของคุณ การแก้ไขสามารถทำได้โดยการเปิดไฟล์ php.ini (การตั้งค่าการกำหนดค่า php)

หา

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

แทนที่ 8 ตามความต้องการของคุณ


1

มันขึ้นอยู่กับเซิร์ฟเวอร์ http เพื่อตัดสินใจว่ามีขีด จำกัด หรือไม่ ผลิตภัณฑ์ที่ฉันทำงานช่วยให้ผู้ดูแลระบบสามารถกำหนดขีด จำกัด ได้


นอกจากนี้ในไฟล์ PNP.INI มีการตั้งค่า: max_input_vars ซึ่งในเวอร์ชัน PHP ของฉัน: 5.4.16 มีค่าเริ่มต้นที่ 1,000 จากคู่มือ: "อาจยอมรับตัวแปรอินพุตจำนวนเท่าใด (จำกัด ให้ใช้กับ $ _GET, $ _POST และ $ _COOKIE superglobal แยกต่างหาก) "การอ้างอิง: [ php.net/manual/en/info.configuration.php#ini.max-input-vars เหมือนพี่น้อง 1] [1]: php.net/manual/th/info.configuration .php # ini.max-input-vars
Nikolay Ivanov

1

หนึ่งในโซลูชันที่ดีที่สุดสำหรับสิ่งนี้คุณไม่ได้ใช้ฟิลด์อินพุตหลายฟิลด์หรือมากกว่า 1,000 ฟิลด์ คุณสามารถต่อหลายอินพุตเข้าด้วยอักขระพิเศษเช่น @.

ดูนี่:

<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'>

ใช้สคริปต์ใด ๆ (JavaScript หรือ 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

ด้วยวิธีนี้คุณจะหลีกเลี่ยงmax_input_varsปัญหา หากคุณเพิ่มmax_input_varsไฟล์ php.ini นั่นเป็นอันตรายต่อเซิร์ฟเวอร์เพราะมันใช้หน่วยความจำแคชของเซิร์ฟเวอร์มากขึ้นและบางครั้งอาจทำให้เซิร์ฟเวอร์เสียหายได้


1
ฉันไม่เห็นว่าการต่อเชื่อมตัวแปรบันทึกหน่วยความจำอย่างไร ASCII-Character แต่ละตัวใช้หน่วยความจำ 1 ไบต์ สตริง (ในทางเทคนิคเป็นอาร์เรย์ถ่านถ้าฉันไม่ผิดพลาด) ใช้ n * 1 ไบต์กับ n เป็นความยาวของสตริง เหตุใดการเพิ่มอักขระอื่นจึงลดหน่วยความจำที่ใช้ไป ในการคำนวณนี้คุณจะเพิ่มอีกหนึ่งไบต์สำหรับแต่ละ '@' ที่คุณเพิ่มลงในสตริง แน่นอนคุณลดจำนวนของตัวแปรที่ใช้ แต่คุณจ่าย "ชนะ" นี้ด้วยงานพิเศษแยกพวกเขาอีกครั้ง
DBX12

2
@ DBX12 ในขณะที่คุณไม่ได้บันทึกหน่วยความจำด้วยเคล็ดลับนี้คุณสามารถข้ามmax_input_varsตัวเลือกในรายการphp.iniนี้ได้ ไม่ถูกต้องสิ่งที่ถาม แต่ก็ยังมีประโยชน์
RicoBrassers

การ จำกัด ขนาดเกินขึ้นอยู่กับปัจจัยสองประการ: ประการแรกขนาดของขนาดสตริง / คีย์ / ค่าของแต่ละบุคคลเช่นจำนวนตัวอักษรในด้านคีย์และ / หรือด้านค่า วินาทีจำนวนของคู่คีย์ / ค่าแม้ว่าแต่ละคู่จะมีจำนวนอักขระน้อย ปัจจัยทั้งสองข้างต้นโดยรวมจบลงด้วยการ จำกัด ขนาดเกินปัญหา ดังนั้นสำหรับฉันคำตอบนี้ถูกต้องและเกี่ยวข้องกับคำถามและเน้นด้านหนึ่งของปัญหา
Elnur Shabanov

0

สำหรับนักพัฒนาที่ไม่สามารถเปลี่ยนการกำหนดค่า php เนื่องจากการโฮสต์เว็บ (การตั้งค่าของฉันขนาดสูงสุด 256MB ตัวแปรสูงสุด 1,000 ตัว)

ฉันได้รับปัญหาเดียวกันที่มีเพียง 2 จาก 5 วัตถุข้อมูลขนาดใหญ่ (อาเรย์เชื่อมโยง) ที่มีโครงสร้างย่อยที่ได้รับทางฝั่งเซิร์ฟเวอร์

ฉันพบว่าโครงสร้างย่อยทั้งหมดนั้น "แบน" ในคำขอโพสต์ ดังนั้นวัตถุหนึ่งจึงกลายเป็นตัวแปรตัวอักษรหลายร้อยตัว ในตอนท้ายแทนที่จะเป็น 5 ตัวแปรออบเจ็กต์ซึ่งในความเป็นจริงแล้วจะส่งตัวแปรอิลิเมนต์หลายร้อยหลายร้อยตัว

โซลูชันในกรณีนี้คือการทำให้โครงสร้างย่อยแต่ละรายการเป็นสตริง จากนั้นจะได้รับบนเซิร์ฟเวอร์เป็นตัวแปร 5 สตริง ตัวอย่าง: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.