У меня возникла странная проблема при загрузке больших файлов в 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, Value: 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 ()
здесь не работает.
Для того чтобы файл размером 40 МБ не загружался с ошибкой, необходимо увеличить post_max_size, если вы превысите значение этой переменной, вы получите пустой массив $_FILES. См. руководство
Если размер данных поста больше чем post_max_size, массивы $_POST и суперглобалы $_FILES будут пустыми.
Кроме того, ini_set() не работает, потому что две переменные, которые вы пытаетесь изменить, имеют значение PHP_INI_PERDIR и поэтому должны быть изменены в php.ini или в .htaccess или httpd.conf. Вы должны попробовать 40MB файл, например, с этими настройками в .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
.