Ограничение загрузки PHP

#php #security #file-upload

#php #Безопасность #загрузка файла

Вопрос:

У меня есть скрипт загрузки php, который циклически перебирает 18 файлов, которые он должен загружать средним размером около 8 МБ, но веб-сайт загружает не все файлы, однако, если я попробую его с 2 или 3, он работает нормально, так есть ли ограничение по соображениям безопасности или что-то в этом роде?

РЕДАКТИРОВАТЬ: Спасибо за все ваши ответы, есть более одного правильного ответа, поэтому, к сожалению, я не могу отметить все из них правильными, но спасибо за попытку 🙂

Комментарии:

1. Вероятно, это связано с кешем, а не с ограничением PHP.

2. хммммм, вы знаете обходной путь?

Ответ №1:

в php.ini изменить

 upload_max_filesize = 100M or your number

memory_limit = 128M or your number
  

и

 post_max_size = 100M
  

Комментарии:

1. Другие варианты, которые следует рассмотреть: max_file_uploads (заводское значение по умолчанию равно 20, но оно варьируется, поэтому стоит проверить.)

Ответ №2:

Вы получаете какие-либо ошибки? Если вы их не видите, проверьте свой журнал ошибок php.

Попробуйте увеличить лимит памяти PHP,

 ini_set('memory_limit', '128mb');
  

И попробуйте увеличить ограничение по времени для вашего скрипта,

 set_time_limit(0); //infinite
  

Комментарии:

1. ini_set() не имеет смысла для загрузок. Это вступает в действие слишком поздно. Вместо этого установите эти значения в вашем файле php.ini.

2. @hakre Почему ты так решил? Если файлы хранятся в памяти для обработки во время загрузки, безусловно, это важно..

3. @hakre С другой стороны, чем это отличается от php.ini или во время выполнения. Они идентичны. Вы, вероятно, думаете о максимальном размере загружаемого файла, который да, должен быть установлен в php.ini.

4. POSTDATA запроса загружается в память php. Если это вызовет ограничение памяти, то php завершит работу. Команда ini_set() еще не была выполнена. Таким образом, если ограничение памяти, установленное в php.ini, слишком низкое, вы не сможете изменить ситуацию с помощью ini_set для загрузки файлов.

Ответ №3:

@John Я думаю, что это не связано с памятью, вместо этого php.ini ограничивает размер загружаемого файла, поэтому попробуйте указать это в php.ini:

 upload_max_filesize = 170M // 8 * 18 ~ 160
  

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

 php_value upload_max_filesize 170M
  

Примечание:
Ваш скрипт может подать файл, если размер некоторого файла превышает ваш лимит памяти. Поэтому имейте в виду, что память использовалась для хранения файла во время выполнения загрузки.

Комментарии:

1. Если бы это было связано с максимальным размером загружаемого файла, весь массив $ _FILES был бы пустым. Это не тот случай, поскольку в OP указано, что некоторые файлы были загружены.

2. @John Однажды я загрузил выгруженную базу данных, она была большой, ее размер меньше моего лимита памяти, но он был больше, чем предельный размер загрузки, изменение предельного размера загрузки устраняет мою проблему.

3. Пожалуйста, вернитесь к моему комментарию. Если сумма всех размеров файлов превысит максимальный размер файла, определенный php.ini, ВЕСЬ массив $_FILES будет пустым. В этом случае, поскольку некоторые файлы были загружены, это указывает на то, что максимальный размер не был превышен, но либо при обработке загрузок закончилась память, либо не хватило времени для их обработки.