Когда я пытаюсь загрузить файл, я проверяю размер файла следующим образом:
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, и все в порядке.
Если вы используете imagecreatefromjpeg()
Я подозреваю, что необходимо выделить достаточно памяти для хранения необработанных данных пикселей из исходного изображения. То есть загрузка изображения 10×10 потребует 10 * 10 * 3 = 300 байт памяти или больше только для данных пикселей. Учитывая размер JPEG, я подозреваю, что у вас очень большое изображение. Размер этих пиксельных данных плюс любые накладные расходы PHP могут превысить пределы вашей памяти, особенно если вы выполняете какие-либо манипуляции, помимо чтения и сохранения.
Попробуйте увеличить лимит памяти в .htaccess выше 21 МБ, чтобы учесть время выполнения приложений, или используйте это в PHP:
ini_set('memory_limit', '128M');
Вы должны убедиться, что все следующие переменные установлены правильно:
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();
}