Странная проблема при загрузке больших файлов
У меня странная проблема при загрузке больших файлов в 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.
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