POST Nội dung-Độ dài vượt quá giới hạn


94

Tôi gặp lỗi tương tự trong error_log của mình trong php khi người dùng tải lên tệp của họ

Cảnh báo PHP: Nội dung BÀI ĐĂNG-Độ dài 11933650 byte vượt quá giới hạn 8388608 byte trong Không xác định trên dòng 0

Trong php.ini của tôi (tệp ini tùy chỉnh được tạo trong public_html) sẽ giải quyết được vấn đề này, tôi sẽ phải đặt nó thành khoảng 1GB là bao nhiêu? Tôi sẽ thay đổi cài đặt của mình thành cài đặt này trong php.ini, nó có giải quyết được vấn đề không?

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

Tôi sẽ đặt giới hạn 'memory_limit' thành gì.

Ngoài ra, điều này có đúng trong tập lệnh của tôi để kiểm tra kích thước tệp tải lên là <1GB không

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

5
Bạn có chắc mình đang chỉnh sửa php.ini đúng không?
Pekka

Bạn có đang chỉnh sửa php.ini đúng không (có một số)? Có điều gì khác đang đặt lại cài đặt không? (ví dụ: có bất kỳ cuộc gọi nào đến php_ini_setkhông?)
Piskvor rời tòa nhà vào

Tôi đã tạo một tệp php.ini tùy chỉnh trong public_html
daza166 Ngày

@daza: bạn không thể thả php.ini ở bất cứ đâu bạn muốn. HP chỉ kiểm tra một số vị trí nhất định và "thư mục hiện tại" không phải là một trong số đó. Bạn có thể sử dụng chỉ thị 'php_value' trong httpd.conf và / hoặc tệp .htaccess để đặt trong một thư mục cụ thể. Nhưng nếu không, bạn sẽ phải thay đổi nó trong tệp .ini chính. Sử dụng php_info()để xem cài đặt "cục bộ" của bạn là gì và tệp .ini nào đang được sử dụng.
Marc B

1
tạo một info.php bằng cách <?php phpinfo(); ?>sao chép nó vào public_html và gọi nó trong trình duyệt của bạn. Sau đó kiểm tra xem upload_max_filesize có đúng giá trị không.
DanielB

Câu trả lời:


96

8388608 byte là 8M, giới hạn mặc định trong PHP. Những thay đổi đó đối với php.ini thực sự sẽ giải quyết được vấn đề (hãy đảm bảo rằng bạn khởi động lại máy chủ Apache sau khi thực hiện chúng).

Không cần phải thay đổi giới hạn bộ nhớ ở đây.


Đảm bảo rằng bạn khởi động lại máy chủ của mình sau khi thực hiện các thay đổi trong tệp .ini.
Sandhu

Nếu bạn đang sử dụng nginx + php fpm, hãy đảm bảo khởi động lại trình nền php sudo service php5-fpm restart
Gourneau

Khởi động lại đã làm điều đó cho tôi. +1 Cảm ơn;)
Refilon

1
Hãy để tôi chỉ gửi ở đây kinh nghiệm của tôi, khi khởi động lại đã cho tôi một stop: Unknown instance:, nó chỉ tạo ra một trường hợp php5-fpm mới nhưng máy chủ web của tôi vẫn còn sử dụng một tuổi, tôi sau đó đã phải làm sudo killall -KILL php5-fpmsau đósudo service php5-fpm start
Memes

Tùy thuộc vào những gì khác đang được thực hiện trong quy trình PHP xử lý tải lên, có thể cần phải tăng memory_limitlên một lượng lớn hơn kích thước tải lên tối đa mong muốn.
Craig Finch

45

Tôi đề nghị rằng bạn nên thay đổi post_max_sizetừ 8M đến 32M trong php.initệp.


39

bạn chỉ cần thiết lập tại php.ini

sau đó đặt:

upload_max_filesize = 1000M;
post_max_size = 1000M;

sau đó khởi động lại xampp của bạn .. Kiểm tra hình ảnh


17

Hãy thử dán cái này vào .htaccess và nó sẽ hoạt động.

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 phải lớn hơn upload_max_filesize một chút , vì khi tải lên bằng phương thức HTTP POST, văn bản cũng bao gồm các tiêu đề với kích thước và tên tệp, v.v.

Nếu bạn muốn tải thành công tệp 1GiB, bạn phải đặt:

upload_max_filesize = 1024M
post_max_size = 1025M

Lưu ý, hậu tố chính xác cho GB là G, tức là upload_max_filesize = 1G.

Không cần đặt memory_limit .


6

Trong một số trường hợp, bạn cần tăng thời gian thực hiện tối đa.

max_execution_time=30

tôi đã làm việc đó

max_execution_time=600000

khi đó tôi đã rất vui.


7
thường thì bạn có thể không muốn làm điều này trong php.ini vì nó sẽ cho phép TẤT CẢ các quy trình php chạy trong khoảng thời gian đó. Bạn có thể đặt nó trong một tập tin duy nhất với Hàm set_time_limit () ví dụ Hàm set_time_limit (600000)
billrichards

5

Có thể có nhiều hơn một tệp php.ini . Ví dụ: khi sử dụng WAMP, có 2 tệp php.ini trong các thư mục sau:

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

Bạn cần chỉnh sửa cái đầu tiên.


4

Tôi không đồng ý, nhưng giải pháp này để tăng kích thước tệp trong php.ini hoặc .htaccess, sẽ không hoạt động nếu người dùng gửi tệp lớn hơn mức cho phép trong ứng dụng máy chủ. Tôi đề nghị xác thực điều này trên giao diện người dùng. Thí dụ:

$(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
Không đồng ý với điều gì?
Rob

1
Việc xác thực phía máy khách là tốt, nhưng nó không có tác dụng gì đối với bảo mật, chỉ đưa ra cảnh báo ngay lập tức cho người dùng nếu họ đang tải lên một tệp lớn. Toàn bộ mục tiêu ở đây không phải là ngăn người dùng tải lên một tệp lớn mà là cho phép họ tải lên một tệp lớn.
Altimus Prime, 14/07/18

1
Không có giải pháp phía máy chủ / kiểm tra điều này? Tôi có thể dễ dàng bỏ qua kiểm tra JS.
akinuri

Nvm, figured it out:if ($_SERVER["CONTENT_LENGTH"] > (int)(str_replace("M", "", ini_get("post_max_size")) * 1024 * 1024)) { // do w/e
akinuri

2

Nếu bạn đang sử dụng phiên bản Php 5.6.X trong các cửa sổ sử dụng Wamp, thì vị trí tệp có thể nằm trong,

C:\Windows\php.ini

Chỉ cần thử với

post_max_size = 100M;

Cố gắng thực hiện các thay đổi trong Apache một. Bằng cách đó Wamp / XAMP của bạn tải tệp .ini

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.