Które z nich ma priorytet w Wordpressie, jeśli chodzi o php.ini, wp-config i .htaccess?

10

Powiedzmy, że chcę zmienić maksymalny limit wysyłania dla witryny Wordpress i podaję następujące wartości:

wp-config.php: 128 MB php.ini: 256 MB .htaccess: 64 MB

Który więc Wordpress miałby priorytet podczas przetwarzania w razie potrzeby?

imranhunzai
źródło

Odpowiedzi:

13

Z twojego pytania nie wynika jasno, co zmieniasz w każdym z tych plików, ale zakładam, że w każdym przypadku jest to upload_max_filesizeustawienie PHP .

Zasadniczo ustawienia będą stosowane w tej kolejności, przy czym każde z nich przekroczy poprzednią wartość:

  1. php.ini
  2. Dyrektywy Apache w .htaccess
  3. połączenia z ini_set()

Jednak to ustawienie jest zdefiniowane jako PHP_INI_PERDIR, co, jak wyjaśniono na tej stronie, oznacza, że ​​nie można go ustawić za pomocą ini_set, więc wp-config.phpnie można go zmienić. Tak więc w przykładzie podanym w pytaniu będzie on przyjmował wartość z .htaccess 64 MB.

Możesz to sprawdzić, uruchamiając się echo ini_get('upload_max_filesize');gdzieś w kodzie.

Zauważ, że istnieją inne miejsca, w których można ustawić wartości, których nie wymieniłem powyżej, takie jak pliki php.ini na użytkownika i inne konteksty konfiguracji Apache . Ponadto niektóre z nich można wyłączyć , więc jeśli twój serwer nie jest skonfigurowany tak, aby zezwalać na over-rides w .htaccess, nie będziesz mógł również ustawić tam wartości.

Zauważ też, że Wordpress zawiera niektóre własne zmienne konfiguracyjne, które na różne sposoby współdziałają z konfiguracją PHP. Na przykład WP_MEMORY_LIMITspróbuje podnieśćmemory_limit ustawienie PHP podczas uruchamiania, ale ma kod, który sprawdza i nigdy go nie obniża . Nie ma ogólnej zasady, będzie różna dla różnych ustawień.

IMSoP
źródło
php.ini jest zawsze pierwszym, który wybiera.
WpMania.Net,
5

Zasadniczo brane są pod uwagę wszystkie trzy pliki.

WordPress / Twój serwer sprawdzi w następującej kolejności:

wp-config.php > .htaccess > php.ini

Jeśli coś na „wyższym poziomie” (później w łańcuchu) ogranicza twoją wartość, poprzednia wartość zostanie zignorowana lub nadpisana. Jeśli brakuje fragmentu łańcucha, zostanie zastosowana wartość, .htaccessna przykład, następna wyższa.

W twoim przykładzie .htaccessograniczyłoby to max_upload_sizedo 64 MB, chociaż twój serwer byłby w porządku z maksymalnie 256 MB, a WordPress najpierw zaakceptowałby rozmiar pliku do 128 MB.

Możesz również ustawić inny limit za pomocą .htaccesspliku i robiąc to, nadpisujesz wartość php.ini, aby nie była już wartością dominującą. Działa to w wielu środowiskach hostingowych, więc są całkiem spore szanse na podniesienie lub obniżenie max_upload_sizew ten sposób.

Jeśli masz bardziej skonfigurowany hosting / serwer, możliwe jest, że opcja zastąpienia ustawień z php.inijest wyłączona. W takim przypadku zastąpienie max_upload_sizez .htaccessnie zadziała, więc może to być czynnik ograniczający.

flomei
źródło
8
Jak to „nie działa”, kiedy podajesz listę priorytetów, tak jak pyta pytanie? A jeśli .htaccessjest na środku listy, dlaczego miałby to być czynnik ograniczający?
IMSoP,
Myślę, że mój wyraz twarzy był niejasny. Zrozumiałem jego pytanie jako „jeśli ustawię wyższą wartość w wp-config, czy to„ zdominuje ”pozostałych?” i że nie jest, jak to działa. ;-) @bns lepiej to wytłumaczył.
flomei
Racja, rozumiem co masz teraz na myśli. Jednak, jak skomentowałem pod odpowiedzią bns, nie mogę znaleźć żadnej dokumentacji potwierdzającej twierdzenie, że nie można zastąpić wyższą wartością. Wartość wp-config.php zawsze będzie ignorowana, jak wyjaśniono w mojej odpowiedzi, ale jestem prawie pewien, że wyższa wartość w .htaccess zastąpi niższą wartość w php.ini.
IMSoP
Masz częściowo rację, ale nadpisywanie wartości php.ini z .htaccess można wyłączyć, zobacz moją zaktualizowaną odpowiedź.
flomei
Aktualizacja nadal oznacza, że ​​możesz ustawić niższą wartość tylko poprzez .htaccess. Nie znam powodu, dla którego nie można ustawić wyższej wartości. Fakt, że mechanizm może być wyłączony, jest dobrym punktem, a ja przejrzałem w mojej odpowiedzi, ale zakładając, że jakiekolwiek ustawienia PHP są dozwolone w .htaccess, wtedy wartość w .htaccess absolutnie „zdominuje” wartość w php.ini dla tego samego ustawienia.
IMSoP
3

Myślę, że Flomei powinien edytować odpowiedź, ponieważ jest to właściwa odpowiedź, ale złe wyjaśnienie. Php.ini -> .htaccess -> wp-config.phpjest faktycznie kolejnością, w jakiej każdy plik zostanie odczytany i ustawi wartości, biorąc pod uwagę, że wcześniej nie zdefiniowano żadnego ustawienia. Ale w przypadku wcześniej zdefiniowanego ustawienia, zostanie ono „zastąpione” tylko wtedy, gdy nowe ustawienie będzie niższe.

Oznacza to, że jeśli masz wp-config.php z 64 MB i .htaccess z 32 MB: wp-config.php nie zastąpi tego ustawienia, ponieważ istnieje już dolny limit i skończysz z 32 MB.

Ale jeśli masz wp-config.php z 32Mb i .htaccess z 64 MB, wp-config.php obniży poprzednie ustawienie do 32Mb.

Edycja: Aby wyjaśnić, jak wskazuje IMSoP, wp-config.php pozwala tylko ustawić rozmiar, który jest bardziej restrykcyjny niż pozwala na to ustawienie PHP, jeśli zmieniasz „WP_MEMORY_LIMIT”, to nie pozwala ci wyjść poza to. Więc to nie jest tak naprawdę przesłonięcie ustawień. W rzeczywistości istnieją oddzielne kontrole wykonywane w różnych punktach w czasie wykonywania. Jeśli zmieniasz ustawienia php, upload_max_filesizejak zakłada (pytanie nie wskazuje, które ustawienia zmieniasz), nie ma to wpływu.

Musisz także wziąć pod uwagę, że post_max_sizemusi być większy niż upload_max_filesizew ustawieniach php

bns
źródło
2
Czy możesz połączyć się z dowolną dokumentacją dotyczącą tego „nadużywania, jeśli nowa wartość jest niższa”, ponieważ z pewnością nie jest to prawdą w przypadku żadnego innego ustawienia PHP, które widziałem. Nie jest też wspomniane na tej stronie podręcznika . Co jest wspomniane, jak wskazałem w mojej odpowiedzi, jest to, że upload_max_filesizenie mogą być zmieniane w czasie wykonywania (prawdopodobnie dlatego, że jest zbyt późno na to, aby mieć jakikolwiek wpływ), więc wp-config.phpnie może wpływać na to w jedną lub drugą. Wspomniano również o domyślnej wartości 2 MB i na pewno można ustawić wyższą wartość.
IMSoP,
Zasadniczo to, co mój zespół wsparcia dla dostawcy hostingu otrzymał ode mnie, gdy miałem ten sam problem, poszukaj e-maila i zaktualizuję, jeśli go znajdę. Nie jestem do końca pewien, czy na serwerze faktycznie nadpisujesz wartość, czy po prostu weryfikacje są wykonywane w czasie wykonywania w różnych miejscach, więc zachowanie jest takie.
bns
1
Wystarczy przypomnieć, jeśli linia jesteś dodanie do wp-config.phpto ini_set('upload_max_filesize', '32M');będzie to miało żadnego wpływu, kiedykolwiek , ponieważ to ustawienie nie może być ustawiony w czasie wykonywania , jak to jest zdefiniowane jakoPHP_INI_PERDIR . (Chyba że ta strona dokumentacji jest nieprawidłowa, ale wydaje się to mało prawdopodobne.)
IMSoP
Nie, masz rację. To nie jest tak naprawdę przesłonięcie ustawień. To tylko kolejne oddzielne ograniczenie, zaktualizuję je odpowiednio, aby uniknąć zamieszania.
bns
1
@IMSoP / bns - Myślę, że może było trochę pomieszania między konkretnymi wp-config.phpwartościami a ustawieniem dowolnych wartości PHP ini_set(). Jak rozumiem, dotyczy wp-config.phpto przede wszystkim ustawiania specyficznych dla WordPress wartości konfiguracyjnych i wiele z nich jest rzeczywiście ograniczonych (tj. Narzuconych górnych limitów) przez podstawowe ustawienia konfiguracyjne PHP (takie WP_MEMORY_LIMITjak wspomniane w odpowiedzi). To jest sprawa WordPress. Jednak przy ustawianiu dowolnych wartości konfiguracyjnych PHP za pomocą ini_set()PHP nie ma takich ograniczeń.
MrWhite