Zmiana upload_max_filesize w PHP


84

Używam PHP 5.3.0 i napotkałem coś, co może być błędem (w takim przypadku to zgłoszę) lub może nim być ja - więc proszę się upewnić.

Podczas uruchamiania tego kodu:

<?php
ini_set('upload_max_filesize', '10M');
echo ini_get('upload_max_filesize'), ", " , ini_get('post_max_size')

Skończyłem z:

2M, 8M

Dzieje się tak pomimo ustawienia mojego php.ini wyżej:

upload_max_filesize = 10M
post_max_size = 10M

(występujące tylko raz)

Ponieważ błąd występuje zarówno po ustawieniu wartości, jak i po ustawieniu jej w php.ini, jestem skłonny myśleć, że to błąd. Czy ktoś może potwierdzić lub wskazać mi, gdzie idę źle?

Aktualizacja : Wygląda na to, że ponowne uruchomienie Apache naprawiło to - zawsze myślałem, że nie trzeba go ponownie uruchamiać, jeśli zmienisz php.ini.


9
„Zawsze myślałem, że nie trzeba go ponownie uruchamiać, jeśli zmienisz plik php.ini”. Interfejs wiersza polecenia PHP pobiera zmiany natychmiast, ponieważ analizuje php.ini przy każdym wywołaniu. mod_php raz parsuje php.ini - kiedy uruchamia się Apache.
— Frank Farmer,

Ostatnio miałem ten sam problem. upload_max_filesize nie zacząłby obowiązywać bez ponownego uruchomienia Apache. Jestem na PHP 5.2.9. Po restarcie wszystko działa dobrze.
— Haluk

Aby uniknąć pełnego restartu Apache, po prostu użyj „sudo service apache2 reload”
— user1048839

Odpowiedzi:


68

Nie możesz używać notacji skróconej do ustawiania wartości konfiguracyjnych poza PHP.ini. Zakładam, że spada do 2 MB jako skompilowanej wartości domyślnej w obliczu złej wartości.

Z drugiej strony nie sądzę, aby upload_max_filesizemożna było ustawić za pomocą ini_set(). „Oficjalny” lista wskazuje, że jest PHP_INI_PERDIR.


11
Myślisz dobrze! Nie możesz ustawić upload_max_filesize za pomocą ini_set (), ponieważ upload_max_filesize jest typem PHP_INI_PERDIR, co oznacza, że ​​można go zmienić tylko przez: php.ini, .htaccess lub httpd.conf, jak podano na: php.net/manual/en/configuration.changes.modes. php
— Marco Demaio

2
Właściwie możesz używać notacji skróconej poza PHP.ini; możesz go używać w, .htaccessa także z ini_set. Może jednak nie we wszystkich wersjach.
— Protector one

70

Czy korzystasz z dostawcy hostingu współdzielonego? Mogą to być ustawienia główne zastępujące wszystko, co próbujesz zmienić. Czy próbowałeś dodać je do swojego .htaccess?

php_value upload_max_filesize 10M
php_value post_max_size 10M

1
Nie, to jest moja własna instancja Apache / PHP na moim komputerze (czyli Windows, jeśli dotyczy). Spróbuję dodać je do konfiguracji Apache.
— Ross,

5
Aktualizacja: To ma na to wpływ (zmienia je na 10), więc ta metoda działa. Nadal jestem zdezorientowany, dlaczego nie działa w php.ini lub nie używa ini_set.
— Ross,

+1 to zdecydowanie najlepsza droga, jeśli nie możesz wejść na php.ini - bardzo dziękuję.
— Alex Coplan

3
Zauważ, że działa to tylko z Apache z uruchomionym PHP jako modułem, a nie jako CGI
— ChrisV,

Powiedziałbym, że jest to preferowana metoda nawet z dostępem do php.inipliku. Umożliwia ustawienie tych uprawnień w oparciu o potrzeby, a nie jako ustawienie globalne.
— Bryant Jackson,

42

Ponieważ właśnie natknąłem się na ten problem na współdzielonym hoście i nie mogłem dodać wartości do mojego pliku .htaccess, pomyślałem, że udostępnię swoje rozwiązanie.

Zrobiłem plik ini z wartościami w nim. Proste:

Utwórz plik o nazwie „.user.ini” i dodaj swoje wartości

upload_max_filesize = 150M
post_max_size = 150M

Bum, problem rozwiązany.


Pracował dla mnie! Dzięki!
— Justin Putney

4
„Oprócz głównego pliku php.ini, PHP wyszukuje pliki INI w każdym katalogu, zaczynając od katalogu żądanego pliku PHP, aż do katalogu głównego bieżącego dokumentu”. php.net/manual/en/configuration.file.per-user.php
— do

1
Działa świetnie z witryną Wordpress! Dzięki!
— avenged_badger

To działało świetnie, ponieważ nie mogę tego zrobić z .htaccess. Dzięki stary!
— Strateg,

PHP domyślnie ponownie odczytuje plik user.ini co 5 minut. Więc bądź cierpliwy, jeśli wynik nie pojawi się natychmiast
— Andrey Yaremenko

10

Mam to do pracy przy użyciu pliku .user.ini w tym samym katalogu co mój skrypt index.php, który ładuje moją aplikację. Oto zawartość:

upload_max_filesize = "20M"
post_max_size = "25M"

Jest to zalecane rozwiązanie dla Heroku.


5

Można to również kontrolować za pomocą konfiguracji Apache. Sprawdź httpd.conf i / lub .htaccess pod kątem czegoś podobnego do następującego:

php_value upload_max_filesize 10M

0

Jeśli pracujesz na serwerze lokalnym, takim jak wamp lub xampp, upewnij się, że używa on pliku php.ini, o którym myślisz. Te serwery zwykle domyślnie używają pliku php.ini, którego nie ma w folderze dokumentów html.



0

Domyślnie PHP pozwala na załadowanie maksymalnie 2 MB pliku na serwer. Ale możesz zmodyfikować maksymalny rozmiar przesyłanego pliku zgodnie ze swoim stanem. Używając pliku konfiguracyjnego PHP php.ini, możesz zwiększyć lub zmniejszyć rozmiar wysyłanego pliku w PHP.

Najpierw otwórz plik php.ini w edytorze tekstu. Przeszukaj zmienną upload_max_filesize i określ rozmiar, który chcesz zwiększyć.

Wyszukaj zmienną post_max_size i określ rozmiar, który chcesz zwiększyć.

post_max_size = 128M

możesz to sprawdzić tutaj


-1

jeśli używasz ini_set w locie, znajdziesz tutaj http://php.net/manual/en/ini.core.php informację, że np. upload_max_filesize i post_max_size nie mogą być zmieniane w locie (PHP_INI_PERDIR).

Jedynie zmiana konfiguracji php.ini, .htaccess lub vhost wydaje się zmieniać te zmienne.



-11

Możesz użyć również w pliku php w ten sposób

<?php ini_set('upload_max_filesize', '200M'); ?>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.