Странная проблема при загрузке больших файлов

У меня странная проблема при загрузке больших файлов в PHP.

В php.ini, max_execution_time установлен на 30, post_max_size установлен на 32M, upload_max_filesize установлен на 32M. Когда я пытался загрузить файл размером 40,2 МБ, он не показывал никакой ошибки. $_FILES переменная имеет значение array(0) { } а также $_FILES['userfile'] шоу NULL,

Если размер файла больше значения, установленного в php.ini, он должен вернуть сообщение об ошибке

UPLOAD_ERR_INI_SIZE, значение: 1; Загруженный файл превышает директиву upload_max_filesize в php.ini.

Но это не показывает никакой ошибки либо (как $_FILES это пустой массив). Я не знаю, почему это происходит.

Когда я изменяю в php.ini и устанавливаю post_max_size равным 64M, upload_max_filesize установлен на 64M, то работает нормально. Поэтому я решил использовать следующий код вместо изменения файла php.ini.

ini_set('upload_max_filesize', '64M');
ini_set('post_max_size', '64M');
ini_set('max_execution_time', 300);

Я даже пытался увеличить max_execution_time, Тем не менее, у меня та же проблема. ini_set() здесь не работает

4 ответа

Решение

Чтобы файл 40 МБ завершился неудачно с ошибкой загрузки, вы должны увеличить post_max_size, если вы превысите значение этой переменной, вы получите пустой массив $_FILES. См. Руководство

Если размер данных поста больше, чем post_max_size, суперглобальные переменные $_POST и $_FILES будут пустыми.

Кроме того, ini_set() там не работает, потому что две переменные, которые вы пытаетесь изменить, это PHP_INI_PERDIR и, следовательно, должны быть изменены в php.ini или.htaccess или httpd.conf. Вы должны попробовать файл 40 МБ, например, с этими настройками в.htaccess

php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 300

Есть еще одна настройка, на которую вам, возможно, придется взглянуть, Apache LimitRequestBody,

Если файл превышает это значение, загрузка может быть заблокирована еще до того, как она достигнет PHP.

Apache Documentation

ini_set() здесь не работает.

Значения, которые вы пытаетесь изменить ini_set()кроме max_execution_time, нельзя изменить с помощью ini_set(),
В списке директив php.ini сообщается, что они имеют тип PHP_INI_PERDIR, что означает (как объяснено в разделе "Где можно задать параметр конфигурации)", что они могут быть изменены в php.ini,.htaccess или httpd.conf. Настройки конфигурации, которые можно изменить с помощью ini_set() помечены как PHP_INI_USER,

ДЛЯ СЕРВЕРА:

В поиске php cPanel вы найдете "Выбрать версию PHP" в разделе "Программное обеспечение". Программное обеспечение -> Выбрать версию PHP -> Перейти к параметрам Php -> Изменить значение -> Сохранить.

ДЛЯ МЕСТНОГО:

Найдите файл PHP ini(настройки конфигурации) в папке php под xampp. + Изменить post_max_size = 40M а также upload_max_filesize = 40M

Другие вопросы по тегам