web-dev-qa-db-fra.com

Lequel des priorités de Wordpress en matière de php.ini, wp-config et .htaccess?

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

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

Alors, à qui Wordpress donnerait la priorité lors du traitement en cas de besoin?

10
imranhunzai

Votre question ne dit pas clairement ce que vous changez dans chacun de ces fichiers, mais je suppose que dans chaque cas, il s'agit de the upload_max_filesize PHP setting .

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

  1. php.ini
  2. Directives Apache dans .htaccess
  3. appels à ini_set()

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

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'emplacement que je n'ai pas répertoriées ci-dessus, telles que les fichiers php.ini par utilisateur et les autres contextes de configuration Apache . De plus, certains de ces peuvent être désactivés . Par conséquent, si votre serveur n'est pas configuré pour autoriser les contournements dans .htaccess, vous ne pourrez pas définir de valeur dans ce cas non plus.

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_LIMIT tentera de raise le PHP memory_limit au démarrage, mais a le code qui le vérifie et ne le réduit jamais . Il n'y a pas de règle générale à cela, ce sera différent pour différents réglages.

14
IMSoP

Fondamentalement, les trois fichiers sont pris en compte.

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

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

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

Dans votre exemple, le .htaccess limiterait le max_upload_size à 64 Mo. Toutefois, votre serveur accepterait jusqu'à 256 Mo et WordPress accepterait également jusqu'à 128 Mo de la taille du fichier.

Vous pouvez également définir une limite différente via le fichier .htaccess et, ce faisant, vous écrasez la valeur de php.ini afin qu'elle ne soit plus la valeur dominante. Cela fonctionne dans beaucoup d'environnements d'hébergement, donc il y a de bonnes chances que vous puissiez augmenter ou / baisser le max_upload_size de cette façon.

Si vous avez un hébergement/serveur configuré de manière plus stricte, il est possible que l'option permettant de remplacer les paramètres à partir de php.ini soit désactivée. Dans ce cas, la substitution de max_upload_size à partir de .htaccess ne fonctionnera pas. Cela pourrait donc être un facteur limitant.

5
flomei

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.php est en fait l'ordre dans lequel chaque fichier sera lu et définira les valeurs en tenant compte du fait qu'il n'y a pas de réglage défini auparavant. Mais dans le cas où un paramètre est défini précédemment, celui-ci ne sera "écrasé" 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 existe déjà une limite inférieure et vous obtiendrez 32 Mo.

Mais si vous avez wp-config.php avec 32 Mo et .htaccess avec 64 Mo, wp-config.php abaissera 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 celle autorisée par les paramètres PHP si vous modifiez 'WP_MEMORY_LIMIT'. aller au-delà de cela. Donc, ce n'est pas réellement une substitution de paramètres. En fait, des contrôles séparés sont effectués à différents moments de l'exécution. Si vous modifiez le paramètre php upload_max_filesize comme il le suppose (la question n'indique pas les paramètres que vous modifiez), cela n'a aucun effet.

En outre, vous devrez prendre en compte que le post_max_size doit être supérieur à upload_max_filesize dans vos paramètres php

3
bns