Qual è la priorità di Wordpress quando si tratta di php.ini, wp-config e .htaccess?


10

Diciamo che voglio cambiare il limite massimo di upload per un sito Web Wordpress e dare i seguenti valori:

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

Quindi, a quale Wordpress darebbe la priorità durante l'elaborazione in base alle necessità?

Risposte:


13

Dalla tua domanda non è chiaro cosa stai cambiando in ciascuno di questi file, ma presumo in ogni caso che sia l' upload_max_filesizeimpostazione PHP .

In generale, le impostazioni verranno applicate in questo ordine, ognuna delle quali supera il valore precedente:

  1. php.ini
  2. Direttive Apache in .htaccess
  3. chiama a ini_set()

Tuttavia, questa impostazione è definita come PHP_INI_PERDIR, che come spiegato in questa pagina significa che non può essere impostata utilizzando ini_set, quindi wp-config.phpnon può cambiarla. Quindi, nell'esempio fornito nella domanda, prenderà il valore da .htaccess di 64 MB.

Puoi verificarlo eseguendo da echo ini_get('upload_max_filesize');qualche parte nel tuo codice.

Nota che ci sono altri posti in cui è possibile impostare valori che non ho elencato sopra, come file php.ini per utente e altri contesti di configurazione di Apache . Inoltre, alcuni di questi possono essere disabilitati , quindi se il tuo server non è impostato per consentire over-rides in .htaccess, non sarai in grado di impostare un valore.

Si noti inoltre che Wordpress include alcune delle proprie variabili di configurazione, che interagiscono in diversi modi con la configurazione di PHP. Ad esempio, WP_MEMORY_LIMITtenterà di aumentare l' memory_limitimpostazione PHP all'avvio, ma ha un codice che controlla e non lo abbassa mai . Non esiste una regola generale per questo, sarà diverso per le diverse impostazioni.


php.ini è sempre il primo a scegliere.
WpMania.Net,

5

Fondamentalmente tutti e tre i file sono presi in considerazione.

WordPress / il tuo server verificherà nel seguente ordine:

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

Se qualcosa di "livello superiore" (più avanti nella catena) sta limitando il tuo valore, il valore precedente verrà ignorato o sovrascritto. Se manca un pezzo della catena, .htaccessverrà utilizzato il valore, ad esempio, quello successivo più alto.

Nel tuo esempio .htaccessciò limiterebbe max_upload_sizea 64 MB, anche se il tuo server andrebbe bene con un massimo di 256 MB e WordPress accetterebbe anche fino a 128 MB in dimensioni di file prima.

Puoi anche impostare un limite diverso tramite il .htaccessfile e in questo modo sovrascrivi il valore da php.ini, in modo che non sia più il valore dominante. Funziona in molti ambienti di hosting, quindi è molto probabile che tu possa aumentare o diminuire max_upload_sizein questo modo.

Se si dispone di un hosting / server più strettamente configurato, è possibile che l'opzione per sovrascrivere le impostazioni php.inisia disabilitata. In questo caso, la sostituzione max_upload_sizedal .htaccesslavoro non funzionerà, quindi questo potrebbe essere un fattore limitante.


8
Come è questo "non come funziona" quando si fornisce un elenco di priorità, proprio come la domanda chiede? E se .htaccessè in mezzo all'elenco, perché quello dovrebbe essere il fattore limitante?
IMSoP,

Penso che la mia espressione non fosse chiara. Ho capito la sua domanda come "se imposto un valore più alto in wp-config, questo" dominerà "gli altri?" e che non è così che funziona. ;-) @bns ha fatto una spiegazione migliore al riguardo.
flomei,

Bene, capisco cosa intendi adesso. Tuttavia, come ho commentato sotto la risposta di bns, non riesco a trovare alcuna documentazione a sostegno dell'affermazione secondo cui non è possibile eseguire l'override con un valore superiore. Il valore di wp-config.php verrà sempre ignorato, come spiegato nella mia risposta, ma sono abbastanza sicuro che un valore più alto in .htaccess sovrascriverà uno più basso in php.ini.
IMSoP

Hai in parte ragione, ma è possibile disattivare i valori php.ini da .htaccess, vedi la mia risposta aggiornata.
flomei,

L'aggiornamento implica comunque che è possibile impostare un valore inferiore solo tramite .htaccess. Non so per quale motivo non si possa anche impostare un valore più alto lì. Il fatto che il meccanismo possa essere disabilitato è un buon punto, e uno che ho chiarito nella mia risposta, ma supponendo che qualsiasi impostazione PHP sia consentita in .htaccess, un valore in .htaccess "dominerà" assolutamente un valore in php.ini per la stessa impostazione.
IMSoP,

3

Penso che Flomei dovrebbe modificare la risposta, perché questa è la risposta giusta ma una cattiva spiegazione. Php.ini -> .htaccess -> wp-config.phpè in realtà l'ordine in cui ciascun file verrà letto e imposterà i valori tenendo conto che non esiste un'impostazione precedentemente definita. Ma nel caso ci sia un'impostazione precedentemente definita, questa sarà "superata" solo se la nuova impostazione è inferiore.

Ciò significa che se hai wp-config.php con 64Mb e .htaccess con 32 MB: wp-config.php non sovrascriverà quell'impostazione perché c'è già un limite inferiore e finirai con 32Mb.

Ma se hai wp-config.php con 32Mb e .htaccess con 64 MB, wp-config.php abbasserà l'impostazione precedente a 32Mb.

Modifica: per chiarire, come sottolinea IMSoP, wp-config.php ti consente solo di impostare una dimensione più restrittiva di quella consentita dalle impostazioni di PHP se stai cambiando 'WP_MEMORY_LIMIT', non ti consente di andare oltre. Quindi non è in realtà una sostituzione delle impostazioni. In effetti, ci sono controlli separati eseguiti in diversi punti in fase di esecuzione. Se stai modificando l'impostazione php upload_max_filesizecome ipotizza (la domanda non indica quali impostazioni stai cambiando), ciò non ha alcun effetto.

Inoltre, dovrai tener conto del fatto che post_max_sizedeve essere maggiore rispetto upload_max_filesizealle tue impostazioni php


2
Puoi collegarti a qualsiasi documentazione per questo "solo il superamento se il nuovo valore è inferiore", perché certamente non è vero per qualsiasi altra impostazione di PHP che ho visto. Né è menzionato in questa pagina di manuale . Ciò che viene menzionato, come faccio notare nella mia risposta, è che upload_max_filesizenon può essere modificato in fase di esecuzione (presumibilmente perché è troppo tardi perché abbia alcun effetto), quindi wp-config.phpnon può influenzarlo in un modo o nell'altro. Viene anche menzionato un valore predefinito predefinito di 2 MB e puoi sicuramente impostarlo su un valore superiore.
IMSoP,

Questo è fondamentalmente ciò che il mio team di supporto del provider di hosting mi ha concesso quando ho avuto lo stesso problema, cercherò l'e-mail e aggiornerò se lo trovo. Non sono davvero sicuro se all'interno del server si sovrascrive effettivamente il valore o è solo che le verifiche vengono eseguite in tempi di esecuzione in luoghi diversi, quindi il comportamento è così.
BN

1
Solo per ribadire, se la linea che stai aggiungendo wp-config.phpè ini_set('upload_max_filesize', '32M');non avrà alcun effetto , perché quell'impostazione non può essere impostata in fase di esecuzione come è definita comePHP_INI_PERDIR . (A meno che la pagina della documentazione non sia errata, ma ciò sembra improbabile.)
IMSoP

No, hai ragione. Non è davvero una sostituzione delle impostazioni. È solo un'altra restrizione separata, aggiornerò di conseguenza per evitare confusione.
BN

1
@IMSoP / bns - Penso che ci sia stata forse un po 'di confusione tra wp-config.phpvalori specifici e impostazione di valori PHP arbitrari con ini_set(). A quanto ho capito, ha wp-config.phpprincipalmente a che fare con l'impostazione dei valori di configurazione specifici di WordPress e molti di questi sono effettivamente limitati (ad es. Limite superiore imposto) dall'impostazione di configurazione di PHP sottostante ( WP_MEMORY_LIMITcome menzionato nella risposta). Questa è una cosa di WordPress. Tuttavia, quando si impostano valori di configurazione PHP arbitrari utilizzando ini_set()in PHP non vi è alcuna limitazione.
MrWhite,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.