.htaccess — PHP memory_limit и размер $ _FILES

Когда я пытаюсь загрузить файл, я проверяю размер файла следующим образом:

if($_FILES['attachment_file']['size'] > (1024 * 1024 * 20)) // 20 MB
{
echo 'The file is too big !'; exit();
}

И в моем файле htaccess у меня есть:

php_value memory_limit 21M
php_value max_execution_time 300
php_value upload_max_filesize 21M
php_value post_max_size 21M

Итак, я проверяю с помощью php, если файл имеет более 20 МБ, затем останавливаю скрипт. Но ошибка «Файл слишком большой!» не показывает …

В журнале ошибок php я получаю сообщение об ошибке «Разрешенный объем памяти 22020096 байт исчерпан».

Если я изменю (1024 * 1024 * 20) в (1024 * 1024 * 10)Работает как положено. PHP поймает ошибку и покажет мне сообщение: «Файл слишком большой!».

В чем проблема ? Почему не работает с 20 МБ?

PS: я проверяю phpinfo, чтобы увидеть, взят ли конфиг из htaccess, и все в порядке.

0

Решение

Если вы используете imagecreatefromjpeg()Я подозреваю, что необходимо выделить достаточно памяти для хранения необработанных данных пикселей из исходного изображения. То есть загрузка изображения 10×10 потребует 10 * 10 * 3 = 300 байт памяти или больше только для данных пикселей. Учитывая размер JPEG, я подозреваю, что у вас очень большое изображение. Размер этих пиксельных данных плюс любые накладные расходы PHP могут превысить пределы вашей памяти, особенно если вы выполняете какие-либо манипуляции, помимо чтения и сохранения.

1

Другие решения

Попробуйте увеличить лимит памяти в .htaccess выше 21 МБ, чтобы учесть время выполнения приложений, или используйте это в PHP:

ini_set('memory_limit', '128M');
0

Вы должны убедиться, что все следующие переменные установлены правильно:

upload_max_filesize - max size of any individual file in an upload
max_file_uploads - total number of files allowed to be uploaded
post_max_size - sum total of all data being POSTed (form data + files)
memory_limit - must be > post_max_size, to allow space for PHP + script overhead

@ref: Загрузка не работает правильно, когда файл слишком большой

и избавиться от этого состояния

if($_FILES['attachment_file']['size'] > (1024 * 1024 * 20)) // 20 MB
{
echo 'The file is too big !'; exit();
}
0
По вопросам рекламы [email protected]