Изменить максимальный размер загружаемого файла


514

У меня есть веб-сайт, размещенный на ПК, к которому у меня нет доступа. У меня есть форма загрузки, позволяющая людям загружать mp3 файлы размером до 30 МБ. Мой серверный скрипт выполнен на PHP.

Каждый раз, когда я пытаюсь загрузить файл, я получаю сообщение об ошибке, утверждающее, что файл превышает максимально допустимый размер, поэтому мне нужно увеличить его. Мое исследование в Интернете предложило изменить .htaccessфайл, к которому у меня нет доступа, чтобы он не работал. Другие предложили мне добавить в php.iniкорень пользовательский файл, который не работал. Любые другие предложения?

Ответы:


878

Вам нужно установить значение upload_max_filesizeи post_max_sizeв вашем php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

После изменения файла (ов) php.ini вам необходимо перезапустить сервер HTTP, чтобы использовать новую конфигурацию.

Если вы не можете изменить свой php.ini, вам не повезло. Вы не можете изменить эти значения во время выполнения; загрузка файла, превышающего значение, указанное в php.ini, завершится неудачно к тому времени, когда выполнение достигнет вашего звонка ini_set.

Смотрите описание основных директив php.ini .


4
Возможно, вы знаете маршрут по умолчанию, в котором хранится файл php.ini?
Твоя мама

1
В Linux это обычно находится в / etc / php / или в том же духе. Если вы находитесь на общем сервере, вам не повезет, если ваш хостинг-провайдер не достаточно щедр, чтобы предоставить файл php.ini для каждого пользователя.
Йоханнес Горсет

4
Если вы используете WAMP под Windows, вы можете отредактировать его, нажав значок WAMP> PHP -> php.ini. В Debian мой конфигурационный файл находится в / etc / php5 / apache2.
Meagar

19
Я предлагаю установить больший размер post_max_size. Общий размер размещенных полей может быть больше, чем размер файла, поэтому, если у вас есть крайний случай, когда кто-то загружает файл размером 40 МБ, произойдет сбой из-за превышения post_max_size.
Acme

2
Обратите внимание, что memory_limit также ограничивает размер загрузки.
Даниэль

151

Вы можете изменить его через .htaccessфайл.

.htaccessфайлы хранятся в том же каталоге, что и ваши .phpфайлы. Они изменяют конфигурацию для этой папки и всех подпапок. Вы просто используете их, создав .htaccessфайл в выбранном вами каталоге (или измените его, если он есть).

Следующее должно позволить вам увеличить лимит загрузки (если поставщик сервера разрешает изменения конфигурации PHP через .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
Кажется, что это не всегда работает. На моей dev-машине установка соответствующего значения в .htaccess сделала работу. Однако на общем хостинге этот параметр не работает, однако сообщение об ошибке показывает, что максимально допустимый размер загрузки - это значение, которое я установил в .htaccess. Так что случается очень странная ситуация.
Евгений Торика

5
Похоже, что добавление этого в .htaccess работает, только если вы используете Apache. Попробуйте и у меня отлично работает.
AngelGris

Это не работает, если эти 2 строки в php.ini были некомментированы :; Имя для пользовательских файлов php.ini (.htaccess). По умолчанию это ".user.ini" ;user_ini.filename = ".user.ini" ; Чтобы отключить эту функцию, установите для этой опции пустое значение;user_ini.filename =
Alan Deep

Стоит отметить, что если вы используете Apache CGI или Fast CGI, это приведет к 500 ошибкам. Оберните это внутри <IfModule mod_php7.c> </ IfModule>
Shardj

59

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

  upload_max_filesize = 40M

  post_max_size = 40M

и это прекрасно сработало для меня!


2
Отлично. Работает с включенным fastcgi тоже. Требуется PHP5.3 или новее.
Ciantic

1
Хорошо, это работает на общем сервере, когда больше ничего не будет работать. Отличная находка.
Эдвард Поттер

55

Вы также можете использовать функцию ini_set (только для версии PHP ниже 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Как сказал @acme, в php 5.3 и выше эти настройки являются директивами PHP_INI_PERDIR, поэтому их нельзя установить с помощью ini_set. Вместо этого вы можете использовать user.ini.


38
В последних версиях PHP эти ini-настройки являются только PHP_INI_PERDIR , поэтому вы не можете установить их в своем скрипте. Смотрите здесь для более подробной информации.
Acme

46

Чтобы найти INI-файл, сначала запустите

php -i | grep -i "loaded configuration file"

Затем откройте файл и измените

upload_max_filesize = 2M
post_max_size = 2M

заменив 2M на нужный размер, например 100M.

У меня есть пост в блоге с немного больше информации тоже http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- файл-для-WordPress


5
Это показывает файл как, /etc/php5/cli/php.iniно мой файл конфигурации /etc/php5/apache2/php.ini. Какой-то вводящий в заблуждение.
Фредрик Гаусс

Есть 2 файла php.ini ... и с помощью этой команды в ответе вы увидите, какой из них вы используете! Так что там нужно внести изменения, чтобы вступить в силу!
lewis4u

40

У меня та же проблема в прошлом .. и я исправил это через .htaccessфайл

Когда вы вносите изменения в php-конфигурацию через .htaccessвас, вы должны поместить конфигурации в IfModuleтэг, иначе возникнет внутренняя ошибка сервера .

Это пример, он отлично работает для меня:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

И это ссылка на php, если вы хотите понять больше. http://php.net/manual/en/configuration.changes.php


5
При условии, что у вас есть возможности переопределения.
AbsoluteƵERØ

3
Для поддержки PHP.7 добавьте тот же блок с: <IfModule mod_php7.c>
Mostafa

16

Я решил эту проблему, создав файл, называемый .user.iniв каталоге, в котором находятся сценарии PHP-файлов (это означает, что любой сценарий PHP в этом каталоге получает новый предел размера файла)

Содержание .user.iniбыло:

upload_max_filesize = 40M
post_max_size = 40M

2
Это решение для меня. Просто отлично работает. Если вы используете фреймворк, такой как codeignitor, «.user.ini» должен находиться в том же месте, что и index.php
The Dude

Спасибо. Это работает для меня. Это идеально подходит для виртуального хостинга, где у вас нет доступа к php.ini. Я бы просто добавил, что он доступен начиная с PHP 5.3
yacsha

6

У меня такая же проблема. Я попробовал три способа, которые обычно предлагались:

  1. functions.php
  2. php.ini
  3. .htaccess

нет, если это решило мою проблему. Я использую Godaddy и наткнулся на предложенное решение, которое было:

  1. добрался до веб-хостинга , затем управляй
  2. Под Software выберите Select PHP version
  3. Выберите « Переключить на параметры PHP» в правом верхнем углу таблицы цветом шрифта: синий
  4. В нижней части вы, вероятно, будете иметь upload_max_filesize = 2M
  5. Теперь смело меняйте его
  6. Обязательно нажмите кнопку Сохранить !
  7. Теперь перейдите на панель wp-admin, выберите Media, затем Add.

Вуаля! Теперь у вас есть другой максимальный размер загружаемого файла :)


6

Много раз я замечал, что сайт с общим хостингом не позволяет изменять настройки в файлах php.ini. один также не может даже создать файл .htaaccess вообще. в такой ситуации можно попробовать следующее

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

6

ответы немного неполные, 3 вещи, которые вы должны сделать

в php.ini вашей установки php (обратите внимание: в зависимости от того, хотите ли вы его для CLI, apache или nginx, найдите нужный php.ini для манипуляции. Для nginx он обычно находится /etc/php/7.1/fpmтам, где 7.1 зависит от вашей версии. Для apache обычно /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

или установите другие значения. Перезапустите / перезагрузите apache, если у вас установлен apache, или php-fpm для nginx, если вы используете nginx.


5

Ну, я хотел бы добавить свои 2 цента здесь.

Я использую общий веб-хостинг и много раз решал эту проблему, пытался решить ее самостоятельно, но безрезультатно. Наконец мне удалось решить эту проблему, проверив различные веб-источники и связавшись с моим поставщиком услуг хостинга. Мои вопросы были: «Как я могу изменить значение php memory_limitв общем веб-хостинге?», «Как я могу изменить значение php upload_max_filesizeв общем веб-хостинге?», «Как я могу изменить значение php max_input_varsв общем веб-хостинге?», «Как я могу изменить значение php max_execution_timeв общий веб-хостинг? "," Как я могу изменить значение php max_input_timeв общем веб-хостинге? " и многое другое путем настройки или изменения php.ini или .htaccessфайла. Я пытался изменить их, но возникли проблемы. Наконец, я связался со своим хостинг-провайдером, и оказалось, что я установил свой php на native, они изменили его на php 5.6,

«Ваш PHP был установлен в« родной »режим, что означает, что вы не можете переопределить эти значения. Я изменил вас на« 5,6 », так что вам будет хорошо.»

После этого я подключил свой сайт через ftp Filezilla, также не забудьте сделать так, чтобы ваш ftp-сервис отображал скрытые файлы, а ваш локальный компьютер - потому что .htaccessфайл был скрыт на моем локальном ноутбуке и на моем сайте. Он был доступен в папке public_html, я просто скачал его и добавил следующие коды в конец файла, а затем загрузил его обратно на сервер:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Пока все работает нормально, если кто-то из вас преодолеет некоторые проблемы, напишите здесь и предупредите меня, чтобы я мог изменить показанные выше коды. Кстати, я также загружаю некоторые фотографии, которые показывают изменения.

Еще одна вещь, о которой я почти забыл упомянуть установку ZipArchive на вашем общем сервисе веб-хостинга: мне удалось выполнить это требование, просто перейдя к настройкам php через мою cpanel, щелкнув по расширениям селектора php, а затем отметив раздел zip, и все.

Спасибо.

PS: я открыт для хороших практик, и если вы видите здесь плохую практику, пожалуйста, дайте мне знать, я постараюсь изменить их. Спасибо.


4

Возможно, это должен быть комментарий к @ seanb123 и @Fredrick Gauss, комментирующий его комментарий, но для меня в Drupal 8.1 с PHP 7 файл, который мне нужно было изменить, находился здесь:

/etc/php/7.0/apache2/php.ini

Я модифицировал, вероятно, четыре других файла php.ini, включая тот, который моя система называла «Loaded Configuration File» ( php -i | grep -i "loaded configuration file"), и тот, который был найден на странице info.php, но ни один из них не помог. Ключ к поиску правильного пути был найден на сайте с 2012 года. Они сказали, что путь "/etc/php5/apache2/php.ini"устарел даже НАЗАД, а затем он дал мне подсказку, где его найти. Для PHP7 это немного отличается от PHP5, но концепция та же.

Может быть, это поможет некоторым беспомощным чмо, как я.

При этом ответом на OP в моем случае будет то, что кто-то с правами администратора на коробке должен будет это сделать.

Сайт, который мне помог: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Это также рассматривается здесь: ограничение размера импортируемого файла в PHPMyAdmin

РЕДАКТИРОВАТЬ: полный текст моей заметки для себя:

Чтобы изменить максимальный размер загрузки, отредактируйте upload_max_filesize и [если необходимо?] Post_max_size в /etc/php/7.0/apache2/php.ini (или в более старых версиях: /etc/php5/apache2/php.ini).

/etc/init.d/apache2 restart

ВНОВЬ РЕДАКТИРОВАТЬ: поскольку вы импортируете большие файлы, вам может потребоваться изменить время ожидания для их обработки. В моем случае файл с именем "config.default.php" был найден в /usr/share/phpmyadmin/libraries/config.default.phpпеременной, например, которую $cfg['ExecTimeLimit'] = 300; я изменил на 900 для огромного импорта. После этого вам нужно перезагрузить Apache


3

Ни одно из этих решений не работает для меня! (уже установлено 32M по умолчанию). Проблема в большинстве случаевmax_allowed_packet

Я работаю на localhost и использую MAMP.

Вот решения;

1. Если у вас нет my.ini

Добавить

--max_allowed_packet=168435456

к

...\MAMP\bin\startMysql.sh

2. Если у вас есть my.ini

Под

[mysqld]

Добавить

max_allowed_packet=100M

СДЕЛАННЫЙ!


Добавил max_allowed_packet = 128M в php.ini и .user.ini, и это сделало это для меня!
Моласар

2

Три вещи, которые вы должны проверить.

upload_max_filesize, memory_limitИ post_max_sizeв php.ini файле конфигурации точно.

Все эти три параметра ограничивают максимальный размер данных, которые могут быть отправлены и обработаны PHP.

Как правило, post_max_sizeи memory_limitдолжны быть больше, чем upload_max_filesize.


Таким образом, три переменные всего вам нужно проверить, чтобы быть абсолютно уверенным.


2

С WAMPэтим все довольно просто

WAMP Значок> PHP> Настройки PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M или Выбрать (по выбору)).

Сервисы перезагружаются автоматически.

Но если у вас действительно нет доступа к серверу, вы можете изучить написание chunkingAPI.


0

У меня также была эта проблема, и я исправил ее, установив этот параметр в /etc/nginx/nginx.conf

client_max_body_size 0;

0, как в неограниченном количестве.

А также, если у вас есть обратный прокси-сервер, работающий с nginx, этот сервер также должен иметь эту настройку (это то, что меня оттолкнуло здесь)


0

Если вы отредактировали нужный файл php.ini, перезапустили Apache или Nginx и по-прежнему не работаете, то вам также нужно перезапустить php-fpm :

sudo service php-fpm restart 

0

Поскольку глобальные изменения несколько рискованны, я пытался увеличить максимальное значение загрузки для одного скрипта big_file_upload.php . Почему-то ini_setне помогло. После некоторого исследования я придумал это. Вставьте это .htaccess(если имя не изменено через AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

Работал на меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.