Змініть максимальний розмір файлу для завантаження


512

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

Кожен раз, коли я намагаюся завантажити файл, я отримую помилку із твердженням, що файл перевищує максимально допустимий розмір, тому мені потрібно збільшувати розмір. Моє дослідження в Інтернеті запропонувало змінити .htaccessфайл, до якого я не маю доступу, щоб він не працював. Інші запропонували мені додати власний php.iniфайл до мого кореня, який не працював. Будь-які інші пропозиції?

Відповіді:


876

Вам потрібно встановити значення 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?
Yo Momma

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.
акме

2
Зауважте, що memory_limit також обмежує розмір завантаження.
Даніель

151

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

.htaccessФайли зберігаються в тому самому каталозі, що і Ваші .phpфайли. Вони змінюють конфігурацію для цієї папки та всіх підпапок. Ви просто використовуєте їх, створивши .htaccessфайл у вибраному каталозі (або змінивши його, якщо він є).

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

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
Здається, це не завжди працює. На моїх розробникових машинах встановлення відповідного значення в .htaccess зробив цю роботу. На спільному хостінгу цей параметр не працює, однак повідомлення про помилку показує, що максимальний дозволений розмір завантаження - це значення, яке я встановив у .htaccess. Тож трапляється дуже жорстка ситуація.
Eugeniu Torica

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 або новіша версія.
Сіантік

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 , тому ви не можете встановити їх у своєму сценарії. Дивіться тут для більш детальної інформації
акме

46

Щоб знайти файл ini, спочатку запустіть

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

Потім відкрийте файл і змініть

upload_max_filesize = 2M
post_max_size = 2M

замінивши 2М потрібного розміру, наприклад 100М.

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


5
Він показує файл як, /etc/php5/cli/php.iniале мій файл конфігурації є /etc/php5/apache2/php.ini. Якесь введення в оману.
Фредрік Гаус

Є два файли 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
За умови, що ви маєте можливість переохочення.
АбсолютƵ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
Чувак

Дякую. Це для мене працює. Це ідеально підходить для спільного хостингу, де у вас немає доступу до php.ini. Я просто додам, що він доступний з PHP 5.3
yacsha

6

У мене була така ж проблема. Я спробував три способи, які зазвичай пропонували:

  1. function.php
  2. php.ini
  3. .htaccess

немає, якщо це вирішило мою проблему. Я використовую godaddy і натрапив на запропоноване рішення, яке було:

  1. потрапили в веб-хостинг , потім керуйте
  2. У розділі Програмне забезпечення виберіть Вибрати версію PHP
  3. Виберіть Переключитися на параметри PHP, знайдені у верхньому правому куті таблиці, кольором шрифту: синім
  4. У нижній частині, ймовірно, ви будете мати upload_max_filesize = 2М
  5. Тепер сміливо це міняйте
  6. Обов’язково натисніть кнопку Зберегти !
  7. Тепер перейдіть на панель wp-admin, виберіть Медіа та додайте

Вуаля! Тепер у вас є інший розмір максимального розміру файлу :)


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 на рідний, вони змінили його на 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, включаючи той, який моя система назвав "Завантажений файл конфігурації" ( php -i | grep -i "loaded configuration file"), і той, який знайдено на сторінці info.php, але жоден з них не допоміг. Ключ до виявлення правильного шляху був знайдений на сайті з 2012 року. Вони сказали, що цей шлях "/etc/php5/apache2/php.ini"застарілий навіть НАЗАД, а це дало мені підказки, де його знайти. Для PHP7 це дещо інше, ніж у PHP5, але концепція така ж.

Можливо, це допоможе якомусь інакше безпорадному шматку, як я.

Коли це було сказано, відповідь на ОП у моєму випадку полягатиме у тому, що хтось із адміністраторськими привілеями повинен це зробити.

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

Це також адресовано тут: Обмеження розміру файлу імпорту в PHPMyAdmin

EDIT: повний текст моєї записки до себе:

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

/etc/init.d/apache2 перезапустити

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


3

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

Я працюю над localhost та використовую MAMP.

Ось рішення;

1. Якщо у вас немає my.ini

Додайте

--max_allowed_packet=168435456

До

...\MAMP\bin\startMysql.sh

2. Якщо у вас є мій.іні

Під

[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.