SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger

#ENV

Février 2009 — mis à jour le : Mai 2010

Toutes les versions de cet article :

Balise permettant d’obtenir la valeur d’une variable fournie par un #INCLURE ou depuis une url


[(#ENV{variable, valeur_par_defaut})] (depuis SPIP 1.8)

#ENV{variable} permet d’accéder aux variables d’environnement d’un squelette (son contexte) [1].

Le squelette peut recevoir cette variable soit de l’URL (la requête HTTP), soit du fichier qui l’inclut, soit encore d’un retour de formulaire.

Exemple de variable passée dans l’url : spip.php?rubrique24&id_mot=5
Dans rubrique.html, #ENV{id_mot} vaut 5.

Exemple de variable passée dans un INCLURE :<INCLURE{fond=mon_squelette} {id_article=136}>
Dans mon_squelette.html, #ENV{id_article} vaut 136.

Valeur par défaut

[(#ENV{variable, valeur_par_defaut})] : le paramètre optionnel valeur_par_defaut contient la valeur qui doit être retournée si la variable n’existe pas (équivalent à [(#ENV{variable}|sinon{valeur_par_defaut})]).

Utile quand un squelette est inclu à partir de différents squelettes, et que l’on en attend un comportement différent selon le contexte.

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 la fonction interdire_scripts. Elle renvoie donc le PHP exécuté. [2]
Ceci peut poser un problème de sécurité si cette variable reçoit une injection de code. Voilà pourquoi interdire_scripts est là par défaut pour invalider les < et autres <script language=php> contenus dans la variable.

Néanmoins #ENV** trouve une application lorsque l’on construit un formulaire. L’utilisation de la double étoile est ainsi nécessaire dans l’affichage des formulaires CVT. Par exemple, pour récupérer le tableau des erreurs dans le squelette du formulaire :
  #ENV**{erreurs}|table_valeur{clef}...

 
 
 

Notes

[1Par sécurité, #ENV ne récupère (ni n’affiche) jamais les variables nommées PHPSESSID ou dont le nom commence par var_ (comme par exemple var_mode et var_profile).

[2imaginons un formulaire tout simple :

<form method="get">
<input type="text" name="test" value="#ENV{test}"> <input type="submit">
</form>
#ENV{test}<br />
#ENV*{test}<br />
#ENV**{test}<br />

dans le formulaire affiché, entrons : <?php echo date('Y-m-d'); ?> dans le champ « test », puis validons.

-  #ENV{test} renverra (source html) : &lt;?php echo date('Y-m-d'); ?&gt;
-  #ENV*{test} renverra (source html) : &lt;?php echo date('Y-m-d'); ?>
-  #ENV**{test} renverra (source html) : 2009-02-12 c’est à dire le php exécuté.


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé