Странная проблема при загрузке больших файлов - PullRequest
6 голосов
/ 23 августа 2010

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

20 голосов
/ 23 августа 2010

Чтобы файл 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
2 голосов
/ 23 августа 2010

Есть еще одна настройка, на которую вам, возможно, нужно обратить внимание, Apache LimitRequestBody.

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

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

1 голос
/ 23 августа 2010

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

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

0 голосов
/ 02 марта 2018

ДЛЯ СЕРВЕРА:

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

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

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

...