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

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

6
задан kiamlaluno 22 August 2010 в 20:32
поделиться

3 ответа

Для того чтобы файл размером 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
20
ответ дан 8 December 2019 в 04:50
поделиться

Есть еще один параметр, который вам может потребоваться посмотреть, Apache LimitRequestBody .

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

Документация Apache

2
ответ дан 8 December 2019 в 04:50
поделиться

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

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

2
ответ дан 8 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: