Les variables globales

Voici le tutorial concernant les variables globales.
Ceci n'est pas vraiment un tutorial, mais plutôt une note d'information.

En effet, depuis la version 4.2.0 de PHP, un paramètre de la configuration de PHP (celui concernant les variables globales) est initialisé par défaut à la valeur OFF lors de l'installation (ce qui implique que les variables globales ne sont pas activées) alors qu'auparavant, il était initialisé à ON (là, les variables globales sont activées).

En conséquence, suivant votre hébergeur, et donc de sa configuration de PHP, il se pourrait très bien que tout ce que vous avez vu jusque là ne fonctionne pas sur votre site.

Cependant, cette différence d'initialisation de paramètre n'influence que sur la méthode permettant de récupérer les variables, que ce soit :
  • des variables provenant de formulaires POST ou GET
  • la valeur des cookies
  • des variables de sessions
  • des variables d'environnement
  • des variables de serveurs


Comme vous le savez, auparavant, pour récupérer nos variables, on les appelait simplement avec un $ suivi de leur nom.

Dans le cas où les variables globales ne sont activées, vous ne pouvez plus utiliser cette méthode afin de récupérer vos variables.

En effet, maintenant, nous récupérerons toutes cas variables et toutes ces valeurs par le biais de tableaux associatifs, que l'on résumer ainsi :

Tableaux associatifsDescription
$_GETRécupération des variables d'un formulaire GET ou des variables passées par une URL
$_POSTRécupération des variables passées par un formulaire POST
$_FILESRécupération des variables de fichiers envoyés par un formulaire
$_COOKIERécupération des valeurs des cookies
$_SESSIONRécupération des variables de session
$_ENVRécupération des variables d'environnement
$_SERVERRécupération des variables serveur


Voyons alors maintenant, cas par cas, comment récupérer ces variables et ces valeurs.

Le cas des formulaires GET (ou des variables passées par une URL)


Supposons que l'on a une page index.htm contenant un formulaire permettant de saisir un login ainsi qu'un mot de passe.
On pourrait alors très bien avoir une page ressemblant à :

exemple1.php
<html>
<head>
<title>Formulaire d'identification</title>
</head>

<body>
<form action="login.php" method="get">
Votre identifiant : <input type="text" name="login">
<br />
Votre mot de passe : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>

</body>
</html>


Pour récupérer nos variables correspondant aux champs login et pwd, nous allons utiliser le tableau associatif $_GET.

On aura lors, par exemple, la page login.php suivante :

exemple2.php
<html>
<head>
<title>Page de récupération des variables</title>
</head>

<body>
<?php
// On teste si nos variables sont déclarées
if (isset($_GET['login']) && isset($_GET['pwd'])) {

// On fait ce que l'on veut ensuite :)
echo 'Votre login est '.$_GET['login'].' Et votre mot de passe est '.$_GET['pwd'];
}
else {
echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>
</body>
</html>


Simple, non ? :)

Précisons également, que lorsque l'on passe des variables par une URL, la méthode ne change absolument pas.



En effet, imaginons la page index.htm suivante :

exemple3.php
<html>
<head>
<title>Juste un lien :)</title>
</head>

<body>
<a href="./login.php?login=GLOBULE&pwd=haha">Notre lien</a>
</body>
</html>


Et bien en gardant la même page login.php que précédemment, l'affichage de la page login.php serait strictement identique que dans le cas du formulaire GET.


Le cas des formulaires POST


La méthode et strictement identique que le cas des formulaires GET, sauf, naturellement, au lieu d'utiliser le tableau associatif $_GET, nous allons ici utiliser le tableau associatif $_POST.

En reprenant les mêmes exemples que précédemment, on aurait alors :

la page index.htm


exemple4.php
<html>
<head>
<title>Formulaire d'identification</title>
</head>

<body>
<form action="login.php" method="post">
Votre identifiant : <input type="text" name="login">
<br />
Votre mot de passe : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>

</body>
</html>


la page login.php


exemple5.php
<html>
<head>
<title>Page de récupération des variables</title>
</head>

<body>
<?php
// On teste nos deux variables
if (isset($_POST['login']) && isset($_POST['pwd'])) {

// On fait ce que l'on veut ensuite :)
echo 'Votre login est '.$_POST['login'].' Et votre mot de passe est '.$_POST['pwd'];
}
else {
'Les variables du formulaire ne sont pas déclarées.';
}
?>
</body>
</html>



Récupération d'un fichier par le biais d'un formulaire


Supposons que l'on dispose d'un formulaire nous permettant d'envoyer un fichier.
On pourrait alors très bien avoir une page index.htm ressemblant à :

exemple6.php
<html>
<head>
<title>Formulaire permettant d'envoyer un fichier</title>
</head>

<body>
<form action="send_fichier.php" method="post" ENCTYPE="multipart/form-data">
Votre fichier : <input type="file" name="mon_fichier">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="20000">
<input type="submit" value="Envoyer">
</form>

</body>
</html>


Dans la page send_fichier.php, on a alors accès aux différentes valeurs (suivant les indices) prises par le tableau associatif $_FILES.

Voici les valeurs que contient ce tableau (suivant les différents indices) :

Valeur du tableauDescription
$_FILES['nom_de_la_variable']['name']Le nom original du fichier qui provient de la machine du client
$_FILES['nom_de_la_variable']['type']Le type MIME du fichier
$_FILES['nom_de_la_variable']['size']La taille du fichier en bytes (soit 8 bits ou un octet)
$_FILES['nom_de_la_variable']['tmp_name']Le nom temporaire du fichier stocké sur le serveur
$_FILES['nom_de_la_variable']['error']Le code erreur associé à l'upload


Pour afficher ces valeurs, on pourrait très bien le code de la page send_fichier.php qui ressemble à :

exemple7.php
<html>
<head>
<title>Page de récupération du fichier</title>
</head>

<body>
<?php
// On teste les différentes valeurs
if (isset($_FILES['mon_fichier']['name']) && isset($_FILES['mon_fichier']['size']) && isset($_FILES['mon_fichier']['tmp_name']) && isset($_FILES['mon_fichier']['type']) && isset($_FILES['mon_fichier']['error'])) {

// On affiche ces différentes valeurs
echo 'Nom d\'origine : '.$_FILES['mon_fichier']['name'].'<br />';
echo 'Taille : '.$_FILES['mon_fichier']['size'].'<br />';
echo 'Nom sur le serveur : '.$_FILES['mon_fichier']['tmp_name'].'<br />';
echo 'Type de fichier : '.$_FILES['mon_fichier']['type'].'<br />';
echo 'Code erreur : '.$_FILES['mon_fichier']['error'].'<br />';
}
else {
echo 'Nos variables ne sont pas déclarées.';
}
?>
</body>
</html>



Les cookies


Supposons que nous disposons d'une page send_cookie.php qui nous permet d'envoyer un cookie contenant le nom d'un visiteur.
On aurait alors par exemple :

exemple8.php
<?php
$temps = 365*24*5500;
setcookie ("pseudo", "LA GLOBULE", time() + $temps);

header ('Location : index.php');
?>


Ensuite, nous allons récupérer la valeur du cookie dans la page index.php, grâce au tableau associatif $_COOKIE.
On pourrait alors avoir le code suivant :

exemple9.php
<html>
<head>
<title>Page de récupération du cookie</title>
</head>

<body>
<?
// On teste notre cookie
if (isset($_COOKIE['pseudo'])) {
echo 'Votre nom est '.$_COOKIE['pseudo'];
}
else {
echo 'Cookie non déclaré';
}
?>
</body>
</html>



Les variables de sessions


Supposons que l'on a le même formulaire d'identification que dans le tutorial consacré aux sessions.
On aura alors :

la page index.htm


exemple10.php
<html>
<head>
<title>Formulaire d'identification</title>
</head>

<body>
<form action="login.php" method="post">
Votre login : <input type="text" name="login">
<br />
Votre mot de passé : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>

</body>
</html>


Là, on remarque aucun changement.

la page login.php


exemple11.php
<?php
// On teste nos variables du formulaire d'authentification par le biais du tableau associatif $_POST
if (isset($_POST['login']) && isset($_POST['pwd'])) {

// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$login_valide = "moi";
$pwd_valide = "lemien";

// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
if ($login == $_POST['login'] && $pwd == $_POST['pwd']) {
// dans ce cas, tout est ok, on peut démarrer notre session

// on la démarre :)
session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($_POST['login'] et $_POST['pwd'])
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];

// on redirige notre visiteur vers une page de notre section membre
header ('location : page_membre.php');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
echo '<body onLoad="alert('Membre non reconnu...')">';
// puis on le redirige vers la page d'accueil
header ('location : index.htm');
}
}
else {
echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>


Là encore, aucun changement, à part que l'on utilise le tableau associatif $_POST pour récupérer les valeurs que le visiteur a saisi dans le formulaire d'identification.

la page page_membre.php


exemple12.php
<?php
// On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
session_start ();

// On teste pour voir si nos variables ont bien été enregistrées
echo '<html>';
echo '<head>';
echo '<title>Page de notre section member</title>';
echo '</head>';

echo '<body>';

// On teste nos variables de session
if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {

// On gère notre affichage
echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.';
echo '<br />';

// On affiche un lien pour fermer notre session
echo '<a href="./logout.php">Déconnection</a>';
}
else {
echo 'Les variables de sessions ne sont pas déclarées.';
}
echo '</body>';
echo '</html>';
?>


Là enfin, on utilise le tableau associatif $_SESSION pour récupérer nos deux variables de sessions : login et pwd.

Les variables d'environnement


Dans ce cas, rien de plus simple, puisque pour afficher le contenu d'une variable d'environnement, il suffit d'écrire $_ENV puis le nom de la variable que l'on désire afficher entre crochet.

Exemples :

exemple13.php
<?php
echo 'Système d\'exploitation : '.$_ENV['OS'];
echo '<br /><br />';
echo 'Chemin du profil utilisateur : '.$_ENV['USERPROFILE'];
?>



Les variables de serveur


On procède de la même manière que pour les variables d'environnement.

Exemples :

exemple14.php
<?php
echo 'Chemin du script courant : '.$_SERVER['PHP_SELF'];
echo '<br /><br />';
echo 'Adresse IP du client : '.$_SERVER['REMOTE_ADDR'];
?>



Pour récupérer plus rapidement ces variables


Afin de récupérer facilement et rapidement vos variables, vous pouvez utiliser la fonction extract.
En effet, cette fonction exporte vos tableaux associatifs en créant une variable pour chaque indice de vos tableaux.

Par exemple, si on a une page index.htm contenant un formulaire à méthode POST, et que dans votre page login.php (ciblée par le champ ACTION du formulaire) vous traitez ces variables, vous pouvez écrire la ligne suivante (dans la page login.php, en tout début de page) :

exemple15.php
<?php
extract ($_POST, EXTR, OVERWRITE);
?>


Ce qui va créer des variables qui contiendront comme valeur les différentes valeurs du tableau associatif $_POST.
Variables qui auront comme nom, la valeur de chacun des indices du tableau associatif $_POST.

Ceci implique que si l'on a un formulaire de type POST, avec, mettons un champ de name login et un autre de name pwd, et bien au lieu de récupérer à chaque fois la valeur des variables à la main, par le biais du tableau associatif $_POST, cette fonction nous permet d'obtenir directement des variables $login et $pwd (au lieu des valeurs de tableau $_POST['login'] et $_POST['pwd']).

Exemple :

la page index.htm


exemple16.php
<html>
<head>
<title>Formulaire d'identification</title>
</head>

<body>
<form action="login.php" method="post">
Votre identifiant : <input type="text" name="login">
<br />
Votre mot de passe : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>

</body>
</html>


la page login.php


exemple17.php
<html>
<head>
<title>Page de récupération des variables</title>
</head>

<body>
<?php
// On récupère nos deux variables
extract ($_POST, EXTR, OVERWRITE);

// On fait ce que l'on veut ensuite :)
echo 'Votre login est '.$login.' Et votre mot de passe est '.$pwd;
?>
</body>
</html>


En clair, extract à créer :
  • une variable $login comprenant la valeur de tableau $_POST['login']
  • une variable $pwd comprenant la valeur de tableau $_POST['pwd']


Le second argument de la fonction sert à gérer les collisions de variables.

Voici les valeurs possibles du second argument de extract :

ValeursDescription
EXTR_OVERWRITEEcrase les variables déjà existantes
EXTR_SKIPN'écrase pas les variables déjà existantes
EXTR_PREFIX_SAMESi une variable de même nom existe déjà, une nouvelle variable sera créée avec un préfixe donné en troisième argument à extract
EXTR_PREFIX_ALLCela crée de nouvelles variables avec le préfixe passé en troisième argument pour toutes les indices du tableau
EXTR_PREFIX_INVALIDCela crée de nouvelles variables avec le préfixe passé en troisième argument pour les noms de variables invalides (voir le tutorial sur les déclarations de variables)
LoadingChargement en cours