Zmień maksymalny rozmiar przesyłanego pliku

512

Mam witrynę hostowaną na komputerze, do którego nie mam dostępu. Mam formularz umożliwiający przesyłanie plików mp3 o wielkości do 30 MB. Mój skrypt po stronie serwera jest wykonywany w języku PHP.

Za każdym razem, gdy próbuję załadować plik, pojawia się komunikat o błędzie stwierdzający, że plik przekracza maksymalny dozwolony rozmiar, więc muszę go zwiększyć. Moje badania w Internecie sugerowały zmianę .htaccesspliku, do którego nie mam dostępu, aby to nie zadziałało. Inni sugerowali, że powinienem dodać niestandardowy php.iniplik do mojego katalogu głównego, który nie działał. Jakieś inne sugestie?

Yo Momma
źródło

Odpowiedzi:

876

Musisz ustawić wartość upload_max_filesizeiw post_max_sizeswoim 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

Po zmodyfikowaniu plików php.ini musisz zrestartować serwer HTTP, aby użyć nowej konfiguracji.

Jeśli nie możesz zmienić swojego php.ini, nie masz szczęścia. Nie można zmienić tych wartości w czasie wykonywania; przesyłanie pliku większego niż wartość określona w php.ini zakończy się niepowodzeniem do czasu, gdy wykonanie osiągnie twoje wezwanie do ini_set.

Zobacz opis podstawowych dyrektyw php.ini .

Meagar
źródło
4
czy znasz domyślną trasę przechowywania pliku php.ini?
Yo Momma,
1
W Linuksie zwykle znajduje się w / etc / php / lub coś podobnego. Jeśli korzystasz z serwera współdzielonego, nie masz szczęścia, chyba że Twój dostawca hostingu jest wystarczająco hojny, aby dostarczyć plik php.ini dla użytkownika.
Johannes Gorset
4
Jeśli używasz WAMP pod Windows, możesz go edytować, klikając ikonę WAMP> PHP -> php.ini. W Debianie mój plik konfiguracyjny znajduje się w / etc / php5 / apache2.
meagar
19
Sugeruję ustawienie większego rozmiaru post_max_size. Ogólny rozmiar wysłanych pól może być większy niż rozmiar pliku, więc jeśli masz przypadek, że ktoś przesyła plik 40 MB, nie powiedzie się z powodu przekroczenia post_max_size.
acme,
2
Pamiętaj, że memory_limit ogranicza także rozmiar wysyłanego pliku.
Daniel
151

Możesz to zmienić za pomocą .htaccesspliku.

.htaccesspliki są przechowywane w tym samym katalogu co .phppliki. Zmieniają konfigurację tego folderu i wszystkich podfolderów. Po prostu ich używasz, tworząc .htaccessplik w wybranym katalogu (lub zmodyfikuj go, jeśli jest obecny).

Poniższe czynności powinny umożliwić zwiększenie limitu przesyłania (jeśli dostawca serwera zezwala na zmiany konfiguracji PHP przez .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M
Andrew Moore
źródło
3
Wygląda na to, że nie zawsze działa. Na moich komputerach programistycznych ustawienie odpowiedniej wartości w .htaccess wykonało zadanie. Jednak na hostingu współdzielonym to ustawienie nie działa, jednak komunikat o błędzie pokazuje, że maksymalny dozwolony rozmiar przesyłania to ta wartość, którą ustawiłem w .htaccess. Tak dzieje się bardzo dziwna sytuacja.
Eugeniu Torica,
5
Wygląda na to, że dodanie tego w .htaccess działa tylko, jeśli korzystasz z Apache. Wypróbuj i działa dobrze dla mnie.
AngelGris
To nie działa, jeśli te 2 wiersze w php.ini nie były komentowane :; Nazwa zdefiniowanych przez użytkownika plików php.ini (.htaccess). Domyślnie jest to „.user.ini” ;user_ini.filename = ".user.ini" ; Aby wyłączyć tę funkcję, ustaw tę opcję na pustą wartość;user_ini.filename =
Alan Deep
Warto zauważyć, że jeśli używasz apache CGI lub Fast CGI, spowoduje to 500 błędów. Zawiń to w <IfModule mod_php7.c> </IfModule>
Shardj,
59

Miałem ten sam problem i utworzyłem plik .user.ini i umieściłem go w katalogu, w którym znajduje się skrypt wysyłania. Następnie w tym pliku ustawiłem te dwie wartości:

  upload_max_filesize = 40M

  post_max_size = 40M

i działało to dla mnie świetnie!

użytkownik1641252
źródło
2
Świetny. Działa również z włączoną funkcją fastcgi. Wymaga PHP 5.3 lub nowszego.
Ciantic
1
Ok, działało to na serwerze współdzielonym, gdy nic innego nie działało. Świetne znalezisko.
Edward Potter
55

Możesz także użyć funkcji ini_set (tylko dla wersji PHP poniżej 5.3):

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

Jak powiedział @acme, w php 5.3 i nowszych ustawieniach są dyrektywy PHP_INI_PERDIR, więc nie można ich ustawić za pomocą ini_set. Zamiast tego możesz użyć user.ini.

Manjar
źródło
38
W najnowszych wersjach PHP te ustawienia ini to tylko PHP_INI_PERDIR , więc nie można ich ustawić w skrypcie. Zobacz tutaj po więcej szczegółów.
acme,
46

Aby zlokalizować plik ini, najpierw uruchom

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

Następnie otwórz plik i zmień

upload_max_filesize = 2M
post_max_size = 2M

zamieniając 2M na żądany rozmiar, na przykład 100M.

Mam też wpis na blogu z trochę więcej informacji http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-s-the-php-ini- file-for-wordpress

seanbehan
źródło
5
Pokazuje plik jako, /etc/php5/cli/php.iniale mój plik konfiguracyjny to /etc/php5/apache2/php.ini. Jakieś wprowadzające w błąd.
Fredrick Gauss
Są 2 pliki php.ini ... a przy tym poleceniu w odpowiedzi pokazuje, którego używasz! Więc musisz wprowadzić zmiany, aby zadziałały!
lewis4u,
40

W przeszłości miałem ten sam problem i naprawiłem go przez .htaccessplik

Kiedy wprowadzasz zmiany w konfiguracji php przez .htaccesspowinieneś umieścić konfiguracje w IfModuleznaczniku, inaczej wystąpi błąd serwera wewnętrznego .

To jest przykład, działa dla mnie dobrze:

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

A to jest odniesienie php, jeśli chcesz dowiedzieć się więcej. http://php.net/manual/en/configuration.changes.php

Eyad Farra
źródło
5
Pod warunkiem, że masz możliwości zastąpienia.
AbsolutnieƵERØ
3
Aby wesprzeć PHP.7, dodaj ten sam blok: <IfModule mod_php7.c>
Mostafa
16

Rozwiązałem ten problem, tworząc plik o nazwie .user.iniw katalogu, w którym znajdują się skrypty plików PHP (oznacza to, że każdy skrypt PHP w tym katalogu otrzymuje nowy limit rozmiaru pliku)

Treści .user.inibyły:

upload_max_filesize = 40M
post_max_size = 40M
Gruszka
źródło
2
To jest dla mnie rozwiązanie. Po prostu działa dobrze. Jeśli używasz frameworka takiego jak codeignitor, „.user.ini” musi znajdować się w tym samym miejscu, co index.php
The Dude
Dzięki. To działa dla mnie. Jest to idealne rozwiązanie do współdzielonego hostingu, gdzie nie masz dostępu do php.ini. Dodałbym tylko, że jest dostępny od PHP 5.3
yacsha
6

Miałem ten sam problem. Wypróbowałem trzy sposoby, które zwykle były sugerowane:

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

żaden, co rozwiązało mój problem. Korzystam z chrzestnego i natknąłem się na sugerowane rozwiązanie:

  1. dostałem do Web Hosting , a następnie Zarządzaj
  2. W obszarze Oprogramowanie wybierz Wybierz wersję PHP
  3. Wybierz Przełącz na PHP Opcje znajdujące się w prawym górnym rogu tabeli w kolorze czcionki: niebieski
  4. W dolnej części prawdopodobnie będziesz mieć upload_max_filesize = 2M
  5. Teraz możesz to zmienić
  6. Pamiętaj, aby kliknąć przycisk Zapisz !
  7. Teraz przejdź do panelu wp-admin, wybierz Media, a następnie Dodaj

Voila! Teraz masz inny maksymalny rozmiar pliku do przesłania :)

nrmb
źródło
6

wiele razy zauważyłem, że witryna z hostowaniem współdzielonym nie pozwala na zmianę ustawień w plikach php.ini. nie można nawet w ogóle utworzyć pliku .htaaccess. w takiej sytuacji można spróbować następujących rzeczy

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
Akademia EasyLearn
źródło
6

odpowiedzi są nieco niekompletne, 3 rzeczy, które musisz zrobić

w php.ini twojej instalacji php (uwaga: w zależności od tego, czy chcesz dla CLI, apache lub nginx, znajdź odpowiedni plik php.ini do manipulowania. Dla nginx zwykle znajduje się /etc/php/7.1/fpmtam, gdzie 7.1 zależy od twojej wersji. Dla apache zwykle /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

lub ustaw inne wartości. Zrestartuj / przeładuj apache, jeśli masz zainstalowany apache lub php-fpm dla nginx, jeśli używasz nginx.

Toskan
źródło
5

Chciałbym tu dodać moje 2 centy.

Korzystam z dzielonego hostingu i wiele razy poradziłem sobie z tym problemem, próbowałem rozwiązać go samodzielnie, ale bezskutecznie. Wreszcie udało mi się to rozwiązać, sprawdzając różne źródła internetowe i kontaktując się z moim dostawcą usług hostingowych. Moje pytania brzmiały: „Jak mogę zmienić wartość php memory_limitwe współdzielonym webhostingu?”, „Jak mogę zmienić wartość php upload_max_filesizewe współdzielonym webhostingu?”, „Jak mogę zmienić wartość php max_input_varswe współdzielonym webhostingu?”, „Jak mogę zmienić wartość php max_execution_timew Shared Webhosting? ”,„ Jak mogę zmienić wartość php max_input_timew Shared Webhosting? ” i wiele innych poprzez konfigurację lub zmianę .htaccesspliku php.ini lub pliku. Próbowałem je zmienić, ale pojawiły się problemy. W końcu skontaktowałem się z moim dostawcą hostingu i okazało się, że ustawiłem php na natywny, zmienili go na php 5.6,

„Twój PHP został ustawiony na tryb„ natywny ”, co oznacza, że ​​nie możesz przesłonić tych wartości. Zmieniłem cię tylko na„ 5.6 ”, więc powinieneś być gotowy.”

Po tym połączyłem moją stronę internetową za pomocą ftp Filezilla, nie zapomnij również zrobić usługi ftp, aby wyświetlać ukryte pliki, i komputera lokalnego, aby to zrobić, ponieważ .htaccessplik został ukryty w moim lokalnym laptopie i na mojej stronie internetowej. Był dostępny w folderze public_html, właśnie go pobrałem i dodałem następujące kody na końcu pliku, a następnie przesłałem z powrotem na serwer:

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

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Na razie wszystko działa poprawnie, jeśli ktoś z was poradzi sobie z pewnymi problemami, proszę napisać tutaj i ostrzec mnie, bym mógł zmienić powyższe kody. Nawiasem mówiąc, przesyłam również zdjęcia, które pokazują zmianę.

Jeszcze jedną rzecz, o której prawie zapomniałem wspomnieć o instalacji ZipArchive we współdzielonej usłudze hostingowej. Udało mi się to zaznaczyć, przechodząc do ustawień php przez mój panel, klikając rozszerzenia selektora php, a następnie zaznaczając sekcję zip, to wszystko.

Dzięki.

PS: Jestem otwarty na dobre praktyki, a jeśli zauważysz tutaj jakąś złą praktykę, daj mi znać, postaram się je zmienić. Dzięki.

garakchy
źródło
4

Być może powinien to być komentarz do @ seanb123 i @Fredrick Gauss komentujący jego komentarz, ale dla mnie w Drupal 8.1 z PHP 7 plik, który musiałem zmodyfikować, znajdował się tutaj:

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

Zmodyfikowałem prawdopodobnie cztery inne pliki php.ini, w tym jeden mój system o nazwie „Załadowany plik konfiguracyjny” ( php -i | grep -i "loaded configuration file") i ten znaleziony na stronie info.php, ale żaden z nich nie pomógł. Klucz do odkrycia prawidłowej ścieżki został znaleziony na stronie od 2012 roku. Powiedzieli, że ścieżka "/etc/php5/apache2/php.ini"jest przestarzała, WSTĘP WTEDY, ale dał mi wskazówkę, gdzie ją znaleźć. W PHP7 jest trochę inaczej niż w PHP5, ale koncepcja jest taka sama.

Może pomoże to takiemu bezradnemu schmuckowi jak ja.

Biorąc to pod uwagę, odpowiedź na OP w moim przypadku byłaby taka, że ​​ktoś z uprawnieniami administratora na pudełku musiałby to zrobić.

Strona, która mi pomogła: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Jest to również omówione tutaj: Limit wielkości importu pliku w PHPMyAdmin

EDYCJA: pełny tekst mojej notatki dla siebie:

Aby zmienić maksymalny rozmiar przesyłania, edytuj rozmiar pliku upload_max_files i [w razie potrzeby?] Post_max_size w /etc/php/7.0/apache2/php.ini (lub w starszych wersjach: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 restart

EDYTUJ PONOWNIE: ponieważ importujesz duże pliki, może być konieczna zmiana limitu czasu ich przetwarzania. W moim przypadku plik o nazwie „config.default.php” został znaleziony przy /usr/share/phpmyadmin/libraries/config.default.phpzmiennej $cfg['ExecTimeLimit'] = 300; , na przykład, zmieniłem mój na 900, aby uzyskać ogromny import. Następnie musisz zrestartować apache

Seizethecarp
źródło
3

Żadne z tych rozwiązań nie działa dla mnie !! (już domyślnie ustawiony jest na 32M). Problem występuje w większości przypadkówmax_allowed_packet

Pracuję na localhost i używam MAMP.

Oto rozwiązania;

1. Jeśli nie masz my.ini

Dodaj

--max_allowed_packet=168435456

Do

...\MAMP\bin\startMysql.sh

2. Jeśli masz my.ini

Pod

[mysqld]

Dodaj

max_allowed_packet=100M

GOTOWY!

ErcanE
źródło
Dodano max_allowed_packet = 128M zarówno do php.ini, jak i .user.ini i to mi zrobiło!
Molasar,
2

Trzy rzeczy, które musisz sprawdzić.

upload_max_filesize, memory_limitA post_max_sizew pliku konfiguracyjnym php.ini dokładnie.

Wszystkie te trzy ustawienia ograniczają maksymalny rozmiar danych, które mogą być przesyłane i obsługiwane przez PHP.

Zwykle post_max_sizei memory_limitmuszą być większe niż upload_max_filesize.


Zatem łącznie trzy zmienne musisz sprawdzić, aby być absolutnie pewnym.

prosti
źródło
2

Ze WAMPto wszystko całkiem proste

WAMP Ikona> PHP> Ustawienia PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M lub Wybierz (niestandardowe)).

Usługi ponownie ładują się automatycznie.

Ale jeśli naprawdę nie masz dostępu do serwera, możesz spróbować napisać chunkinginterfejs API.

SimonB
źródło
0

Miałem również ten problem i naprawiłem go, ustawiając to ustawienie w /etc/nginx/nginx.conf

client_max_body_size 0;

0, jak w nieograniczonym.

A także, jeśli masz odwrotne proxy działające z nginx, ten serwer powinien również mieć to ustawienie (to mnie tutaj wyrzuciło)

Maszyna do pisania
źródło
0

Jeśli edytowałeś właściwy plik php.ini, zrestartowałeś Apache lub Nginx i nadal nie działa, musisz zrestartować również php-fpm :

sudo service php-fpm restart 
Adrian Onu
źródło
0

Ponieważ globalna zmiana jest nieco ryzykowna, starałem się zwiększyć maksymalną wartość wysyłania dla pojedynczego skryptu big_file_upload.php . Z jakiegoś powodu ini_setnie pomogło. Po pewnym badaniu, wymyśliłem to. Wstaw to .htaccess(chyba że nazwa zostanie zmieniona przez 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>

Pracował dla mnie.

Hebe
źródło