Lequel Wordpress priorise-t-il en ce qui concerne php.ini, wp-config et .htaccess?


10

Supposons que je souhaite modifier la limite de téléchargement maximale pour un site Web Wordpress et que je donne les valeurs suivantes:

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

Alors, lequel Wordpress prioriserait-il lors du traitement selon les besoins?

Réponses:


13

Il ne ressort pas clairement de votre question ce que vous modifiez dans chacun de ces fichiers, mais je suppose que dans chaque cas, c'est le upload_max_filesizeparamètre PHP .

En général, les paramètres seront appliqués dans cet ordre, chacun remplaçant la valeur précédente:

  1. php.ini
  2. Directives Apache en .htaccess
  3. appelle à ini_set()

Cependant, ce paramètre est défini comme PHP_INI_PERDIR, ce qui, comme expliqué sur cette page, signifie qu'il ne peut pas être défini à l'aide de ini_set, donc wp-config.phpne peut pas le modifier. Ainsi, dans l'exemple que vous donnez dans la question, il prendra la valeur de .htaccess de 64 Mo.

Vous pouvez le vérifier en exécutant echo ini_get('upload_max_filesize');quelque part dans votre code.

Notez qu'il existe d'autres valeurs d'endroits que je n'ai pas répertoriées ci-dessus, telles que les fichiers php.ini par utilisateur et d' autres contextes de configuration Apache . De plus, certains d'entre eux peuvent être désactivés , donc si votre serveur n'est pas configuré pour autoriser les dépassements dans .htaccess, vous ne pourrez pas non plus y définir de valeur.

Notez également que Wordpress inclut certaines de ses propres variables de configuration, qui interagissent de différentes manières avec la configuration PHP. Par exemple, WP_MEMORY_LIMITtentera d' augmenter le memory_limitparamètre PHP au démarrage, mais dispose d'un code qui le vérifie et ne l'abaisse jamais . Il n'y a pas de règle générale, ce sera différent pour différents paramètres.


php.ini est toujours le premier à choisir.
WpMania.Net

5

Fondamentalement, les trois fichiers sont pris en considération.

WordPress / votre serveur vérifiera dans l'ordre suivant:

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

Si quelque chose à un "niveau supérieur" (plus tard dans la chaîne) limite votre valeur, l'ancienne valeur sera ignorée ou remplacée. Si un morceau de la chaîne est manquant, la valeur dans .htaccesspar exemple, la plus haute suivante sera utilisée à la place.

Dans votre exemple, le .htaccesslimiterait max_upload_sizeà 64 Mo, bien que votre serveur soit bien avec jusqu'à 256 Mo et WordPress accepterait également jusqu'à 128 Mo en taille de fichier en premier.

Vous pouvez également définir une limite différente via le .htaccessfichier et ce faisant, vous écrasez la valeur de php.inisorte qu'elle ne soit plus la valeur dominante. Cela fonctionne dans de nombreux environnements d'hébergement, donc les chances sont assez bonnes que vous puissiez augmenter ou diminuer le max_upload_sizede cette façon.

Si vous avez un hébergement / serveur plus strictement configuré, il est possible que l'option de remplacer les paramètres de php.inisoit désactivée. Dans ce cas, outrepassant max_upload_sizedu .htaccesstravail ne le ferai pas, donc cela pourrait être un facteur limitant.


8
Comment est-ce «pas comment ça marche» lorsque vous donnez une liste de priorités, tout comme la question le demande? Et si .htaccessc'est au milieu de la liste, pourquoi serait-ce le facteur limitant?
IMSoP

Je pense que mon expression n'était pas claire. J'ai compris sa question comme "si je mets une valeur plus élevée dans wp-config, est-ce que cela" dominera "les autres?" et ce n'est pas ainsi que cela fonctionne. ;-) @bns a fait une meilleure explication à ce sujet.
flomei

Bon, je vois ce que tu veux dire maintenant. Cependant, comme je l'ai commenté sous la réponse de bns, je ne trouve aucune documentation confirmant l'affirmation selon laquelle vous ne pouvez pas remplacer une valeur supérieure. La valeur wp-config.php sera toujours ignorée, comme expliqué dans ma réponse, mais je suis sûr qu'une valeur plus élevée dans .htaccess remplacerait très bien une valeur plus basse dans php.ini.
IMSoP

Vous avez partiellement raison, mais la substitution des valeurs php.ini de .htaccess peut être désactivée, voir ma réponse mise à jour.
flomei

Votre mise à jour implique toujours que vous ne pouvez définir qu'une valeur inférieure via .htaccess. Je ne connais aucune raison pour laquelle vous ne pouvez pas également définir une valeur plus élevée. Le fait que le mécanisme puisse être désactivé est un bon point, et je l'ai passé en revue dans ma réponse, mais en supposant que tous les paramètres PHP soient autorisés dans .htaccess, alors une valeur dans .htaccess "dominera" absolument une valeur dans php.ini pour le même réglage.
IMSoP

3

Je pense que flomei devrait modifier la réponse, car c'est la bonne réponse mais une mauvaise explication. Php.ini -> .htaccess -> wp-config.phpest en fait l'ordre de lecture de chaque fichier et définira les valeurs en tenant compte du fait qu'il n'y a pas de paramètre défini précédemment. Mais dans le cas où il existe un paramètre précédemment défini, il ne sera "remplacé" que si le nouveau paramètre est inférieur.

Cela signifie que si vous avez wp-config.php avec 64 Mo et .htaccess avec 32 Mo: wp-config.php ne remplacera pas ce paramètre car il y a déjà une limite inférieure et vous vous retrouverez avec 32 Mo.

Mais si vous avez wp-config.php avec 32 Mo et .htaccess avec 64 Mo, wp-config.php réduira le paramètre précédent à 32 Mo.

Edit: Pour clarifier, comme le souligne IMSoP, wp-config.php vous permet simplement de définir une taille plus restrictive que ce que les paramètres PHP permettent si vous changez 'WP_MEMORY_LIMIT', cela ne vous laisse pas aller au-delà. Il ne s'agit donc pas en fait d'un remplacement de paramètres. En fait, des contrôles séparés sont effectués à différents points lors de l'exécution. Si vous modifiez le paramètre php upload_max_filesizecomme il le suppose (la question n'indique pas quels paramètres modifiez-vous), cela n'a aucun effet.

En outre, vous devrez tenir compte du fait que le post_max_sizedoit être supérieur à celui upload_max_filesizede vos paramètres php


2
Pouvez-vous lier à n'importe quelle documentation pour cela "ne remplacer que si la nouvelle valeur est inférieure", car ce n'est certainement pas le cas pour tout autre paramètre PHP que j'ai vu. Il n'est pas non plus mentionné sur cette page de manuel . Ce qui est mentionné, comme je le souligne dans ma réponse, est que upload_max_filesizecela ne peut pas être changé au moment de l'exécution (probablement parce qu'il est trop tard pour que cela ait un effet) et wp-config.phpne peut donc pas l'affecter d'une manière ou d'une autre. Un défaut intégré de 2 Mo est également mentionné, et vous pouvez certainement le définir plus haut que cela.
IMSoP

C'est essentiellement ce que mon équipe de support d'hébergement m'a expliqué quand j'ai eu le même problème, je rechercherai l'e-mail et le mettrai à jour si je le trouve. Je ne sais pas vraiment si à l'intérieur du serveur vous remplacez réellement la valeur, ou c'est juste que les vérifications sont effectuées en temps d'exécution à différents endroits, donc le comportement est comme ceci.
bns

1
Il suffit de demander de nouveau, si la ligne que vous ajoutez à wp-config.phpest ini_set('upload_max_filesize', '32M');qu'il aura aucun effet, jamais , parce que ce paramètre ne peut être réglé à l' exécution comme il est défini commePHP_INI_PERDIR . (Sauf si cette page de documentation est erronée, mais cela semble peu probable.)
IMSoP

Non, tu as raison. Ce n'est pas vraiment un remplacement de paramètres. C'est juste une autre restriction séparée, je mettrai à jour en conséquence pour éviter toute confusion.
bns

1
@IMSoP / bns - Je pense qu'il y a peut-être eu un peu de confusion entre des wp-config.phpvaleurs spécifiques et la définition de valeurs PHP arbitraires avec ini_set(). Si je comprends bien, il wp-config.phps'agit principalement de définir des valeurs de configuration spécifiques à WordPress et beaucoup d'entre elles sont en effet limitées (c'est-à-dire une limite supérieure imposée) par le paramètre de configuration PHP sous-jacent (tel WP_MEMORY_LIMITque mentionné dans la réponse). C'est une chose WordPress. Cependant, lors de la définition de valeurs de configuration PHP arbitraires à l'aide ini_set()de PHP, il n'y a pas une telle restriction.
MrWhite
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.