Изменить максимальный размер загружаемого файла
У меня есть веб-сайт, размещенный на ПК, к которому у меня нет доступа. У меня есть форма загрузки, позволяющая людям загружать mp3 файлы размером до 30 МБ. Мой серверный скрипт выполнен на PHP.
Каждый раз, когда я пытаюсь загрузить файл, я получаю сообщение об ошибке, утверждающее, что файл превышает максимально допустимый размер, поэтому мне нужно увеличить его. Мое исследование в Интернете предложило изменить .htaccess
файл, к которому у меня нет доступа, поэтому он не будет работать. Другие предложили мне добавить кастом php.ini
файл в мой корень, который не работал. Любые другие предложения?
24 ответа
Вам необходимо установить значение 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.
Вы можете изменить его через .htaccess
файл.
.htaccess
файлы хранятся в том же каталоге, что и ваш .php
файлы есть. Они изменяют конфигурацию для этой папки и всех подпапок. Вы просто используете их, создавая .htaccess
файл в каталоге по вашему выбору (или измените его, если есть).
Следующее должно позволить вам увеличить лимит загрузки (если поставщик сервера разрешает изменения конфигурации PHP через .htaccess
).
php_value upload_max_filesize 40M
php_value post_max_size 42M
У меня была та же проблема, и я создал файл.user.ini и поместил его в каталог, в котором находился скрипт загрузки. В этом файле я установил эти два значения:
upload_max_filesize = 40M
post_max_size = 40M
и это отлично сработало для меня!
Вы также можете использовать функцию 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.
Чтобы найти 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-file-for-wordpress
У меня та же проблема в прошлом.. и я исправил ее .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
Я решил эту проблему, создав файл с именем .user.ini
в каталоге, где находятся скрипты PHP-файла (это означает, что любой скрипт PHP в этом каталоге получает новый предел размера файла)
Содержание .user.ini
мы:
upload_max_filesize = 40M
post_max_size = 40M
Ответы немного неполные, 3 вещи, которые вы должны сделать
в php.ini вашей установки php (обратите внимание: в зависимости от того, хотите ли вы его для CLI, apache или nginx, найдите нужный php.ini для манипуляции. Для nginx он обычно находится в /etc/php/7.1/fpm
где 7.1 зависит от вашей версии. Для апача обычно /etc/php/7.1/apache2
)
post_max_size=500M
upload_max_filesize=500M
memory_limit=900M
или установите другие значения. Перезапустите / перезагрузите apache, если у вас установлен apache, или php-fpm для nginx, если вы используете nginx.
Много раз я замечал, что сайт с общим хостингом не позволяет изменять настройки в файлах 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);
Возможно, это должен быть комментарий к @seanb123 и @Fredrick Gauss, комментирующий его комментарий, но для меня в Drupal 8.1 с PHP 7 файл, который мне нужно было изменить, находился здесь:
/etc/php/7.0/apache2/php.ini
Я модифицировал, вероятно, четыре других файла php.ini, включая тот, который моя система называла "Загруженный файл конфигурации" (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
У меня такая же проблема. Я попробовал три способа, которые обычно предлагались:
- functions.php
- php.ini
- .htaccess
нет, если это решило мою проблему. Я использую Godaddy и наткнулся на предложенное решение, которое было:
- добрался до веб-хостинга, затем управляй
- В разделе " Программное обеспечение" выберите " Выбрать версию PHP".
- Выберите " Переключиться на параметры PHP" в правом верхнем углу таблицы цветом шрифта: синий
- В нижней части вы, вероятно, будете иметь upload_max_filesize = 2M
- Теперь смело меняйте его
- Обязательно нажмите кнопку Сохранить!
- Теперь перейдите на панель wp-admin, выберите Media, затем Add.
Вуаля! Теперь у вас есть другой максимальный размер загружаемого файла:)
Ну, я хотел бы добавить свои 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: я открыт для хороших практик, и если вы видите здесь плохую практику, пожалуйста, дайте мне знать, я постараюсь изменить их. Благодарю.
Все существующие ответы имеют частичные решения, поэтому вот скомпилированный ответ:
Решение 1. Отредактируйте файл .htaccess. Подходит для серверов Apache .
php_value upload_max_filesize 128M
php_value post_max_size 132M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300
Решение 2. Отредактируйте файл wp-config.php, подходящий для приложения Wordpress .
@ini_set( 'upload_max_filesize' , '128M' );
@ini_set( 'post_max_size', '132M');
@ini_set( 'memory_limit', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );
Решение 3. Отредактируйте файл php.ini. Подходит для серверов nginx или там, где php.ini можно изменить .
upload_max_filesize = 128M
post_max_size = 132M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
Необязательно: сервер Nginx.
Для nginx увеличьте максимальный размер загружаемого файла (по умолчанию 1 МБ), добавивclient_max_body_size 128M;
директива в
http
или же
server
блокировать.]
Важное объяснение настроек:
- upload_max_filesize — установите значение больше, чем размер вашего файла.
- post_max_size — установите значение > чем ваш upload_max_filesize , потому что общий размер опубликованных полей может быть больше, чем размер файла.
- memory_limit — установите для этого значения значение, превышающее размер вашего файла, поскольку оно ограничивает максимальный объем памяти, который может потреблять скрипт.
- max_execution_time — максимальное время выполнения каждого скрипта в секундах. Установите это значение на 0 (бесконечно), если вашему скрипту требуется много времени для обработки файла.
- max_input_time — максимальное количество времени, которое каждый скрипт может потратить на анализ данных запроса. По умолчанию 60 секунд. Установите для этого параметра значение -1, если скрипты требуют больше времени.
И, наконец, не забудьте перезагрузить сервер. Примените ниже то, что подходит для вас:
# if php-fpm is used for processing php
sudo service php7.4-fpm restart
# for nginx
sudo service nginx restart
# for apache
sudo service httpd restart
С WAMP
это все довольно легко
WAMP
Значок> PHP > Настройки PHP> upload_max_filesize = nM > n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M или Выбрать (по выбору)).
Сервисы перезагружаются автоматически.
Но если у вас действительно нет доступа к серверу, вы можете изучить написание chunking
API.
Поскольку глобальные изменения несколько рискованны, я пытался увеличить максимальное значение загрузки для одного скрипта. 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>
Работал у меня.
Ни одно из этих решений не работает для меня! (уже установлено 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
СДЕЛАННЫЙ!
Если вы отредактировали правильный файл php.ini, перезапустили Apache или Nginx и по-прежнему не работает, то вам также необходимо перезапустить php-fpm:
sudo service php-fpm restart
У меня тоже была эта проблема, и я исправил ее, установив этот параметр в /etc/nginx/nginx.conf
client_max_body_size 0;
0, как в безлимитном.
А также, если у вас есть обратный прокси, работающий с nginx, этот сервер также должен иметь этот параметр (это то, что меня здесь сбило)
Три вещи, которые вы должны проверить.
upload_max_filesize
, memory_limit
а также post_max_size
в файле конфигурации php.ini точно.
Все эти три параметра ограничивают максимальный размер данных, которые могут быть отправлены и обработаны PHP.
типично post_max_size
а также memory_limit
должен быть больше чем upload_max_filesize
,
Таким образом, три переменные всего вам нужно проверить, чтобы быть абсолютно уверенным.
вам нужно найти, где установлен php, вы увидите файл php.ini
просто откройте этот файл в любом редакторе и замените значение th
max_file_upload : 2M
Откройте файл php.ini.
Выполните поиск по ключевому слову, например upload_max_filesize, в php.ini.
Затем измените размер файла.
upload_max_filesize = 400 МБ
Необходимо изменить максимальное значение публикации.
post_max_size = 400 МБ
Я знаю, что есть много ответов на этот вопрос, но вphp.ini
в основном следующая переменная полезна только для изменения максимального размера загружаемого файла
поскольку иногда пользователь обновляет максимальный размер файла, но не обновляет ограничение памяти, что приводит к прерыванию процесса импорта.
поэтому здесь я перечисляю все связанные переменные, которые необходимо изменить, а также максимальный размер файла.
- max_execution_time
- memory_limit
- display_errors
- post_max_size
- upload_max_filesize
- max_input_time
Примечание. Теперь ini хранится в папке примерно так:
/etc/php/8.1/apache2/php.ini
Проведя часы, я просмотрел почти все сообщения, но безуспешно. И, наконец, решил проблему с помощью этих шагов. Это может быть странное решение, но у меня сработало.
Шаг 1: найдите файл php.ini в папке / etc или папке /, выполнив команду ниже:
grep -rl "post_max_size" | xargs ls -lrth
Здесь я использовал ключевое слово post_max_size для поиска файла "php.ini" в папке / etc, но в некоторых системах вы можете найти его в папках / var / www / html или / var / www / wordpress.
У нас есть несколько сообщений в Интернете, как будто файла php.ini нет в папке WordPress, вы можете создать, но в моем случае это не работает.
Шаг 2:
Отредактируйте файл php.ini и измените значение следующим образом.
post_max_size = 100M
upload_max_filesize = 100M
В приведенном выше примере вы можете установить любое значение в соответствии с вашими требованиями.
Шаг 3:
Перезапустите службу httpd, Nginx или apache и PHP, или, согласно настройке, вы можете перезапустить веб-службу.
Для меня перезапуск службы httpd и php-fpm работал в centos 8:
service httpd restart
service php-fpm restart
Первый вариант: используйте этот вариант, если у вас есть разрешение на редактирование файла php.ini.
Параметры upload_max_filesize и post_max_size в php.ini необходимо изменить для поддержки файлов большего размера, чем разрешенный размер php по умолчанию.
установите upload_max_filesize на максимальный размер файла, который необходимо загрузить.
Значение post_max_size должно быть больше, чем upload_max_filesize , чтобы обработать файл и размер переменных сообщения формы, являющихся частью формы загрузки файла. В случае, если несколько файлов загружаются в форму загрузки файлов одновременно, post_max_size должен быть установлен в (upload_max_filesize * количество файлов) + размер переменных сообщения.
upload_max_filesize=30M
post_max_size=31M
Нет необходимости обновлять настройки php memory_limit и max_execution_time , если файл просто перемещается с помощью move_uploaded_file по конечному пути в php-скрипте загрузки файла. Но если скрипт загрузки файла обрабатывает файл или читает файл в переменную или выполняет любую другую обработку, которая использует память, время и т. д., следует установить memory_limit и max_execution_time .
Установите memory_limit на объем памяти, необходимый для запуска php-скрипта, и max_execution_time на время в секундах, необходимое для запуска скрипта.
memory_limit = 100M
max_execution_time = 120
Перезапустите веб-сервер после изменения php.ini, чтобы он вступил в силу.
Второй вариант: используйте этот вариант, если у вас нет разрешения на обновление глобальных настроек php.ini или для повышения безопасности.
Скопируйте php-скрипты загрузки в новую дочернюю папку, скажите «Загрузить» и создайте файл «.user.ini» в новой папке. Также не забудьте обновить атрибут действия формы загрузки файла, чтобы опубликовать его в новом скрипте в папке «Загрузить».
Добавьте приведенные ниже настройки во вновь созданный файл. ".user.ini".
upload_max_filesize=30M
post_max_size=31M
;below are optional
memory_limit = 100M
max_execution_time = 120
Настройка «user_ini.filename» php.ini может быть обновлена, чтобы дать файлу настроек пользователя другое имя.
Этот параметр повышает безопасность, поскольку параметры upload_max_filesize, post_max_size, memory_limit, max_execution_time изменяются только для скриптов в новой папке и не влияют на настройки php для скриптов в других папках, а также предотвращают любое нежелательное использование ресурсов плохими скриптами.
Пожалуйста, обратитесь к ссылкам ниже для получения дополнительной информации о настройках ".user.ini"
https://www.php.net/manual/en/configuration.changes.modes.php
https://www.php.net/manual/en/ini.list.php
https://www.php.net/manual/en/configuration.file.per-user.php
Перезапустите веб-сервер, чтобы новые изменения .user.ini вступили в силу.
Примечание:
Настройки memory_limit и max_execution_time также можно установить в скрипте загрузки php с помощью функций ini_set и set_time_limit вместо обновления файла php.ini.
Если используется этот параметр, не нужно обновлять настройки memory_limit и max_execution_time в ini-файле.
Добавьте ниже в начало скрипта загрузки файла php
ini_set('memory_limit', '100M');
set_time_limit(120);