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.

Ross
źródło
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.

Obrabować
źródło
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
karim79
źródło
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.

funt szterling
źródło
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.

dwenaus
źródło
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
Byron Whitlock
źródło
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.

Dom na plaży
źródło
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

hammad khan
źródło
-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.

Sassman
źródło
-1

Napotkałem ten sam problem, ale odkryłem, że nie wszystkie ustawienia konfiguracyjne można ustawić za pomocą funkcji ini_set (), sprawdź to Gdzie można ustawić ustawienie konfiguracji

Hassan Nemir
źródło
-11

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

<?php ini_set('upload_max_filesize', '200M'); ?>
Nishant Patel
źródło