web-dev-qa-db-fra.com

Est-il prudent d'utiliser $ _SERVER ['REQUEST_URI']?

J'ai examiné d'autres réponses et je constate que $_SERVER['REQUEST_URI'] est généralement recommandé. Il s'agit de la réponse acceptée pour obtenir l'URI de la page actuelle avec $_SERVER['HTTP_Host'].

J'ai jeté un œil au code source WP, qui est également largement utilisé ici.

Mais j'ai trouvé une controverse sur le fait que cela ne fonctionne pas sur IIS. Peut-être que ce n'était qu'un problème dans le passé? J'ai même essayé d'installer IIS sur mon PC pour le vérifier, mais je ne peux pas le configurer et il semble exagéré de le confirmer.

Il semble que ce soit la seule variable SERVEUR qui inclut les informations que je veux:

/ pane-slug/nggallery/tags/dark-colors/

l'exemple en surbrillance est ajouté via NextGEN Gallery 2 et n'est accessible que par le $_SERVER['REQUEST_URI'], rien d'autre. Auparavant, il était accessible via get_query_var, plus maintenant.

Si $_SERVER['REQUEST_URI'] n'est pas défini, le simuler en le configurant manuellement et en le créant sur la base de PHP_SELF et QUERY_STRING entraîne des résultats inéquivalents.

Alors, est-il prudent de s’appuyer sur $_SERVER['REQUEST_URI'] qui est toujours disponible pour une utilisation sur les installations de WP? Je suppose que c’est depuis que le code principal WP l'utilise, mais je devais le demander.

3
Firsh - LetsWP.io

$_SERVER['REQUEST_URI'] ne sera pas vide dans WordPress, car il est rempli dans wp_fix_server_vars() (fichier wp-includes/load.php).

Cette fonction est appelée dans wp-settings.php avant qu'un plugin ne soit chargé. Donc, vous pouvez l'utiliser.

Mais échappez toujours à la valeur. Il est global et peut être modifié par tout autre code, vous ne pouvez donc pas faire confiance à sa valeur.

Un cas différent consiste à accéder à la valeur par

filter_input(INPUT_SERVER, 'REQUEST_URI'); 

L'accès en écriture par WordPress aura pour effet not d'affecter la valeur, car filter_input() prend toujours la valeur d'origine. Ainsi, bien que cette approche soit plus moderne et plus propre, elle peut échouer dans certaines circonstances. Voir aussi ce fil sur Stack Overflow .

8
fuxia