#ENV

#ENV{parametre} récupère des variables d’environnement transmises au squelette. Un second argument permet de donner une valeur par défaut si le paramètre demandé n’est pas présent dans l’environnement ou si son contenu est vide.

  • Apparu en : SPIP 1.8

Description

[(#ENV{paramètre, valeur par défaut})]

Chercher dans un sous tableau
Le nom du paramètre d’environnement peut également contenir des barres obliques / indiquant de chercher dans un sous tableau. Cette écriture est équivalente à l’appel du filtre |table_valeur et est aussi valide sur les balises #GET, #SESSION et #CONFIG.

#ENV{parametre/dans/un/tableau, valeur par défaut}
// équivalent à :
[(#ENV**{parametre}|table_valeur{dans/un/tableau, valeur par défaut})]

Enfin, la balise #ENV toute seule retourne un tableau sérialisé de tous les paramètres d’environnement.

Exemples

Récupérer un identifiant d’article, sinon la chaîne « new » :

#ENV{id_article,new}

Récupérer dans une boucle les valeurs de l’id_rubrique et de l’id_mot passées dans l’URL spip.php?rubrique24&id_mot=5

<BOUCLE_art(ARTICLES){id_rubrique=#ENV{id_rubrique}}{id_mot=#ENV{id_mot}}>
…

Récupérer l’id_article passée dans un INCLURE :

<INCLURE{fond=mon_squelette, id_article=136}>

Dans mon_squelette.html, #ENV{id_article} vaut 136.

Exemples avancés

Avec dans l’URL ?afficher[articles]=oui, tester si on affiche les articles :

#ENV{afficher/articles} // affiche 'oui'

Afficher tout l’environnement (utile pour débugguer) :

[<pre>(#ENV**|unserialize|print_r{1})</pre>]

Important : Pour des questions de sécurité, il faudra absolument retirer ce code à la fin de développement de votre site.

Court-circuiter les traitements de sécurité

Par défaut, SPIP applique les fonctions interdire_scripts() et |entites_html à la balise #ENV. Comme pour toute balise, on peut supprimer les traitements automatiques de SPIP avec #ENV* et #ENV** (voir, pour l’usage de * et **, l’article #BALISE* et #BALISE**).

-  #ENV* retourne la variable sans appliquer le filtre |entites_html , donc sans transformer tous les caractères spéciaux en entités HTML.

-  #ENV** retourne la variable sans appliquer également la fonction interdire_scripts(). Elle renvoie donc le PHP exécuté.
Ceci peut poser un problème de sécurité si cette variable reçoit une injection de code.

Néanmoins #ENV** trouve des applications, par exemple dans l’espace privé où la fonction interdire_scripts() est appliquée de façon plus restrictive. #ENV** permet alors de lever ces restrictions de façon très localisée. Mais encore une fois, à utiliser en connaissance de cause !

Voir aussi

Sur Programmer.spip.net

Auteur Aurélie, cam.lafit, denisb Publié le : Mis à jour : 14/07/23

Traductions : عربي, català, English, Español, français, Nederlands, русский, Türkçe, українська