POST ความยาวของเนื้อหาเกินขีด จำกัด


95

ฉันได้รับข้อผิดพลาดที่คล้ายกันใน error_log ใน php เมื่อผู้ใช้อัปโหลดไฟล์

คำเตือน PHP: ความยาวของเนื้อหา POST ที่ 11933650 ไบต์เกินขีด จำกัด 8388608 ไบต์ใน Unknown ที่บรรทัด 0

ใน php.ini ของฉัน (สร้างไฟล์ ini แบบกำหนดเองใน public_html) จะแก้ปัญหานี้ได้ไหมฉันต้องตั้งค่าเป็นประมาณ 1GB เท่าไหร่ ฉันจะเปลี่ยนการตั้งค่าเป็น php.ini จะแก้ปัญหาได้หรือไม่

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

ฉันจะตั้งค่าขีด จำกัด "memory_limit" เป็นอะไร

สิ่งนี้จะถูกต้องหรือไม่ในสคริปต์ของฉันเพื่อตรวจสอบขนาดไฟล์ที่อัปโหลดคือ <1GB

if($_FILES["uploadedfile"]["size"]<1000000)

5
แน่ใจหรือว่ากำลังแก้ไข php.ini ที่ถูกต้อง
Pekka

คุณกำลังแก้ไข php.ini ที่ถูกต้อง (มีหลายตัว) หรือไม่? มีสิ่งอื่นกำลังรีเซ็ตการตั้งค่าหรือไม่? (เช่นโทรไปหาphp_ini_set?)
Piskvor ออกจากอาคาร

ฉันสร้างไฟล์ php.ini ที่กำหนดเองใน public_html
daza166

@daza: คุณไม่สามารถวาง php.ini ได้ทุกที่ที่คุณต้องการ PHP จะตรวจสอบเฉพาะบางตำแหน่งเท่านั้นและ "ไดเรกทอรีปัจจุบัน" ไม่ใช่หนึ่งในนั้น คุณสามารถใช้คำสั่ง 'php_value' ใน httpd.conf และ / หรือไฟล์. htaccess เพื่อตั้งค่าในไดเร็กทอรีเฉพาะ แต่ไม่เช่นนั้นคุณจะต้องเปลี่ยนไฟล์ในไฟล์. ini หลัก ใช้php_info()เพื่อดูว่าการตั้งค่า "ในเครื่อง" ของคุณคืออะไรและกำลังใช้ไฟล์. ini ใด
Marc B

1
สร้าง info.php โดย<?php phpinfo(); ?>คัดลอกไปที่ public_html และเรียกใช้ในเบราว์เซอร์ของคุณ จากนั้นตรวจสอบว่า upload_max_filesize มีค่าที่ถูกต้องหรือไม่
DanielB

คำตอบ:


98

8388608 ไบต์คือ 8M ขีด จำกัด เริ่มต้นใน PHP การเปลี่ยนแปลง php.ini เหล่านั้นน่าจะช่วยแก้ปัญหาได้ (ตรวจสอบให้แน่ใจว่าคุณรีสตาร์ทเซิร์ฟเวอร์ Apache หลังจากสร้างเสร็จแล้ว)

ไม่ควรเปลี่ยนขีด จำกัด หน่วยความจำที่นี่


ตรวจสอบให้แน่ใจว่าคุณรีสตาร์ทเซิร์ฟเวอร์หลังจากทำการเปลี่ยนแปลงในไฟล์. ini
Sandhu

หากคุณใช้ nginx + php fpm อย่าลืมรีสตาร์ท php daemon sudo service php5-fpm restart
Gourneau

การรีสตาร์ททำเพื่อฉัน +1 Thanks;)
Refilon

1
ให้ฉันโพสต์ประสบการณ์ของฉันที่นี่การรีสตาร์ททำให้ฉันเป็นstop: Unknown instance:เพียงการสร้างอินสแตนซ์ php5-fpm ใหม่ แต่เว็บเซิร์ฟเวอร์ของฉันยังคงใช้อันเก่าอยู่ฉันก็ต้องทำเช่นsudo killall -KILL php5-fpmนั้นsudo service php5-fpm start

ขึ้นอยู่กับสิ่งอื่นที่กำลังดำเนินการในกระบวนการ PHP ที่จัดการการอัปโหลดอาจจำเป็นต้องเพิ่มmemory_limitจำนวนให้มากกว่าขนาดอัปโหลดสูงสุดที่ต้องการ
Craig Finch



17

ลองวางสิ่งนี้ลงใน. htaccess ก็น่าจะใช้ได้

php_value post_max_size 2000M
php_value upload_max_filesize 2500M
php_value max_execution_time 6000000
php_value max_input_time 6000000
php_value memory_limit 2500M

10

post_max_sizeควรใหญ่กว่าupload_max_filesizeเล็กน้อยเนื่องจากเมื่ออัปโหลดโดยใช้วิธี HTTP POST ข้อความจะมีส่วนหัวที่มีขนาดไฟล์และชื่อด้วยเป็นต้น

หากคุณต้องการอัปโหลดไฟล์ 1GiB ให้สำเร็จคุณต้องตั้งค่า:

upload_max_filesize = 1024M
post_max_size = 1025M

หมายเหตุคำต่อท้ายที่ถูกต้องสำหรับ GB คือ G เช่น upload_max_filesize = 1G

ไม่จำเป็นต้องตั้งmemory_limit


6

ในบางกรณีคุณต้องเพิ่มเวลาดำเนินการสูงสุด

max_execution_time=30

ฉันทำมัน

max_execution_time=600000

แล้วฉันก็มีความสุข


7
บ่อยครั้งคุณอาจไม่ต้องการทำสิ่งนี้ใน php.ini เนื่องจากจะอนุญาตให้กระบวนการ php ทั้งหมดทำงานในช่วงเวลานั้น คุณสามารถตั้งค่าเป็นไฟล์เดียวด้วย set_time_limit () เช่น set_time_limit (600000)
billrichards

5

อาจมีไฟล์ php.iniมากกว่าหนึ่งไฟล์ ตัวอย่างเช่นเมื่อใช้ WAMP จะมีไฟล์ php.ini 2 ไฟล์ในไดเร็กทอรีต่อไปนี้:

  • C:\wamp\bin\apache\apache2.4.9\bin
  • C:\wamp\bin\php\php5.5.12

คุณต้องแก้ไขรายการแรก


4

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

$(document).ready(function() {
    $ ('#your_input_file_id').bind('change', function() {
        var fileSize = this.files[0].size/1024/1024;
        if (fileSize > 2) { // 2M
            alert('Your custom message for max file size exceeded');
            $('#your_input_file_id').val('');
        }
    });
});


2
ไม่เห็นด้วยกับอะไร?
Rob

1
การตรวจสอบความถูกต้องของฝั่งไคลเอ็นต์เป็นเรื่องปกติ แต่ไม่ได้ทำอะไรเพื่อความปลอดภัยเพียง แต่แจ้งเตือนผู้ใช้ทันทีหากกำลังอัปโหลดไฟล์ขนาดใหญ่ วัตถุประสงค์ทั้งหมดในที่นี้ไม่ใช่เพื่อป้องกันไม่ให้ผู้ใช้อัปโหลดไฟล์ขนาดใหญ่ แต่เพื่อให้พวกเขาอัปโหลดไฟล์ขนาดใหญ่
Altimus Prime

1
ไม่มีโซลูชันฝั่งเซิร์ฟเวอร์ / ตรวจสอบสิ่งนี้หรือไม่? ฉันสามารถข้ามการตรวจสอบ JS ได้อย่างง่ายดาย
akinuri

Nvm คิดออก:if ($_SERVER["CONTENT_LENGTH"] > (int)(str_replace("M", "", ini_get("post_max_size")) * 1024 * 1024)) { // do w/e
akinuri

2

หากคุณใช้เวอร์ชัน Php 5.6.X ใน Windows โดยใช้ Wamp ตำแหน่งไฟล์อาจอยู่ใน

C:\Windows\php.ini

เพียงแค่ลองใช้

post_max_size = 100M;

ลองทำการเปลี่ยนแปลงใน Apache one โดยที่ Wamp / XAMP ของคุณโหลดไฟล์. ini

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