Довжина вмісту POST перевищує обмеження


94

Я отримую подібні помилки в моєму error_log у php, коли користувачі завантажують свої файли

PHP Попередження: Довжина вмісту POST 11933650 байт перевищує межу 8388608 байт у Невідомому рядку 0

У моєму php.ini (створений користувальницький ini-файл у public_html) це вирішило б цю проблему, наскільки мені доведеться встановити її близько 1 ГБ? Я збираюся змінити свої налаштування на це в php.ini, це вирішить проблему?

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

Що б я встановив обмеження 'memory_limit'.

Також це було б правильно в моєму сценарії, щоб перевірити розмір завантаженого файлу <1 Гб

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

5
Ви впевнені, що редагуєте правильний php.ini?
Pekka

Ви редагуєте правильний php.ini (їх декілька)? Щось ще скидає налаштування? (наприклад, будь-які дзвінки php_ini_set?)
Пісквор вийшов з будинку

Я створив нестандартний файл 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

Відповіді:


96

8388608 байт дорівнює 8М, обмеження за замовчуванням у PHP. Ці зміни в php.ini дійсно повинні вирішити проблему (переконайтесь, що перезавантажте сервер Apache після їх внесення).

Тут не потрібно змінювати обмеження пам’яті.


Переконайтеся, що перезавантажте сервер після внесення змін у файл .ini.
Сандху

Якщо ви використовуєте nginx + php fpm, не забудьте перезапустити демон php sudo service php5-fpm restart
Gourneau

Перезапуск зробив це для мене. +1 Дякую;)
Рефілон

1
Дозволь мені просто розмістити тут свій досвід, рестарт дав мені stop: Unknown instance:, це було просто створити новий екземпляр php5-FPM , але мій веб - сервер ще використовує старий, я тоді повинен був зробити sudo killall -KILL php5-fpmтеsudo service php5-fpm start
меми

Залежно від того, що ще робиться в процесі PHP, який обробляє завантаження, може знадобитися збільшити memory_limitдо кількості, що перевищує бажаний максимальний розмір завантаження.
Крейг Фінч,


39

ви просто встановлюєте на php.ini

потім встановіть:

upload_max_filesize = 1000M;
post_max_size = 1000M;

потім перезапустіть xampp .. Перевірте зображення


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 є 2 файли php.ini у таких каталогах:

  • 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
Не погодитися з чим?
Роб

1
Добре перевірити клієнтську сторону, але це нічого не робить для безпеки, а лише негайно попереджати користувача, якщо він завантажує великий файл. Вся мета тут не утримувати користувачів від завантаження великого файлу, це дозволити їм завантажувати великий файл.
Прем'єр-міністр Альтімуса

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.