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?

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


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.


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


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