Nous allons en particulier nous attarder sur certaines d’entre elles qu’il est indispensable de connaitre et de savoir utiliser.
Présentation des variables superglobales
Les variables superglobales sont des variables internes au PHP, ce qui signifie que ce sont des variables créées automatiquement par le PHP.
Ces variables vont être accessibles n’importe où dans le script et quel que soit le contexte, qu’il soit local ou global. C’est d’ailleurs la raison pour laquelle on appelle ces variables « superglobales ».
Il existe 9 superglobales en PHP. Ces variables vont toutes être des variables tableaux qui vont contenir des groupes de variables très différentes. La plupart des scripts PHP vont utiliser les variables superglobales car ces dernières vont s’avérer très souvent très utiles . Il est donc indispensable de bien les connaitre et de savoir les manipuler.
Les variables superglobales PHP sont les suivantes :
$GLOBALS
;$_SERVER
;$_REQUEST
;$_GET
;$_POST
;$_FILES
;$_ENV
;$_COOKIE
;$_SESSION
.
On écrira toujours les superglobales en majuscules. Cela est une convention qui permet de les différencier des variables « classiques » que nous créons nous-mêmes. Par ailleurs, vous pouvez remarquer que toutes les superglobales à l’exception de $GLOBALS
commencent par un underscore _
.
Dans la suite de cette leçon, nous allons présenter brièvement chacune de ces variables superglobales. Nous allons étudier la plupart d’entre elles plus en détail dans les leçons ou les parties suivantes.
La variable superglobale $GLOBALS
La variable superglobale $GLOBALS
est un peu différente des autres superglobales puisque c’est la première superglobale qui a été créée en PHP, bien avant les autres (en réalité, $GLOBALS
a toujours été disponible en PHP).
Cette superglobale va nous permettre d’accéder à des variables définies dans l’espace global depuis n’importe où dans le script et notamment depuis un espace local (dans une fonction).
La variable superglobale $GLOBALS
est une variable tableau qui stocke en fait automatiquement toutes les variables globales déclarées dans le script.
Ce tableau est un tableau associatif qui contient les noms des variables créées dans l’espace global en index et leurs valeurs en valeurs du tableau.
Si vous avez lu le chapitre sur la portée des variables, vous devriez vous rappeler du mot clef global
qui sert justement à accéder à une variable définie dans l’espace global depuis un espace local.
Ce mot clef est lié au contenu de $GLOBALS
et il va souvent être équivalent d’utiliser global
ou $GLOBALS
pour accéder à une variable en particulier depuis un espace local.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php $prenom = 'Pierre'; $nom = 'Giraud'; $age = 28; //On utilise le mot clef global function prez(){ $mail = 'pierre.giraud@edhec.com'; global $prenom, $nom, $age; echo 'Je suis ' .$prenom. ' ' .$nom. ', j\'ai ' .$age. ' ans.<br> Mon adresse mail est : ' .$mail; } //On utilise la superglobale $GLOBALS function prez2(){ $mail = 'pierre.giraud@edhec.com'; echo 'Je suis ' .$GLOBALS[prenom]. ' ' .$GLOBALS[nom]. ', j\'ai ' .$GLOBALS[age]. ' ans.<br>Mon adresse mail est : ' .$mail; } prez(); echo '<br><br>'; prez2(); echo '<br><br>'; echo '<pre>'; print_r($GLOBALS); ?> <p>Un paragraphe</p> </body> </html>
Ici, on commence par définir 3 variables dans l’espace global : $prenom
, $nom
et $age
. On crée ensuite deux fonctions qui vont utiliser ces variables.
Pour accéder à nos variables globales dans notre première fonction prez()
, on utilise le mot clef global
.
Pour accéder à nos variables globales depuis notre deuxième fonction prez2()
, on va plutôt cette fois-ci utiliser notre superglobale $GLOBALS
. On va lui passer les noms des variables auxquelles on souhaite accepter en indice afin que le tableau nous retourne les valeurs associées.
Comme vous pouvez le voir, les deux méthodes sont ici équivalentes. Je vous conseille dans cette situation d’utiliser plutôt le mot clef global
.
La variable superglobale $GLOBALS
va pouvoir être intéressante lorsqu’on voudra parcourir rapidement l’ensemble des variables globales définies dans un script. Comme cette variable est un tableau associatif, on peut utiliser une boucle foreach
pour afficher toutes ses valeurs ou tout simplement la fonction print_r()
pour afficher rapidement sa structure.
La variable superglobale $_SERVER
La superglobale $_SERVER
contient des variables définies par le serveur utilisé ainsi que des informations relatives au script.
Cette superglobale est à nouveau un tableau associatif dont les clefs sont les noms des variables qu’elle stocke et les valeurs sont les valeurs des variables liées.
Voici quelques clefs qu’il peut être intéressant de connaitre :
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php //Renvoie le nom du fichier contenant le script echo $_SERVER['PHP_SELF']. '<br>'; //Renvoie le nom du serveur qui héberge le fichier echo $_SERVER['SERVER_NAME']. '<br>'; //Renvoie l'adresse IP du serveur qui héberge le fichier echo $_SERVER['SERVER_ADDR']. '<br>'; //Retourne l'IP du visiteur demandant la page echo $_SERVER['REMOTE_ADDR']. '<br>'; /*Renvoie une valeur non vide si le script a *été appelé via le protocole HTTPS*/ echo $_SERVER['HTTPS']. '<br>'; //Retourne le temps Unix du début de la requête echo $_SERVER['REQUEST_TIME']; ?> <p>Un paragraphe</p> </body> </html>
Vu que j’exécute ce script localement, ces valeurs ne sont évidemment pas très intéressantes dans mon cas. Cependant, elles vont pouvoir s’avérer très utiles dans le cas d’un « vrai » site hébergé sur un serveur.
Notez qu’il est possible que vous n’ayez pas les mêmes valeurs que moi renvoyées par $_SERVER['SERVER_ADDR']
et $_SERVER['REMOTE_ADDR']
. En effet, selon que vous utilisiez une adresse ipv6 ou ipv4, vous pouvez avoir soit la valeur ::1
soit la valeur 127.0.0.1
La variable superglobale $_REQUEST
La variable superglobale $_REQUEST
va contenir toutes les variables envoyées via HTTP GET, HTTP POST et par les cookies HTTP.
Cette variable, qui est un tableau associatif, va ainsi contenir les variables de $_GET
, $_POST
et $_COOKIE
.
Nous n’avons pas pour le moment les connaissances nécessaires pour illustrer le fonctionnement de cette variable, nous en reparlerons plus tard.
La variable superglobale $_ENV
La superglobale $_ENV
va contenir des informations liées à l’environnement dans lequel s’exécute le script.
Cette variable est une nouvelle fois une variable tableau. Celle-ci va pouvoir contenir, par exemple, le nom de l’utilisateur qui exécute le script si celui-ci est accessible.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php echo $_ENV['USER']. ' exécute actuellement ce script'; ?> <p>Un paragraphe</p> </body> </html>
La variable superglobale $_FILES
La superglobale $_FILES
va contenir des informations sur un fichier téléchargé, comme le type du fichier, sa taille, son nom, etc.
On pourra donc utiliser cette superglobale lorsqu’on offre la possibilité à nos utilisateurs de nous envoyer des fichiers, afin d’obtenir des informations sur les fichiers envoyés ou même pour filtrer et interdire l’envoi de certains fichiers.
Les variables superglobales $_GET et $_POST
Les superglobales $_GET
et $_POST
vont être utilisées pour manipuler les informations envoyées via un formulaire HTML.
En effet, ces deux superglobales vont stocker les différentes valeurs envoyées par un utilisateur via un formulaire selon la méthode d’envoi : $_GET
stockera les valeurs lorsque le formulaire sera envoyé via la méthode GET
tandis que $_POST
stockera les valeurs lorsque le formulaire sera envoyé via la méthode POST
.
Nous allons pouvoir revoir en détail le fonctionnement de ces variables lorsqu’on va étudier la gestion des données des formulaires en PHP. Cependant, on peut déjà prendre un premier exemple simple :
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php //Si notre variable $_POST['prenom'] est bien définie, echo... if(isset($_POST['prenom'])){ echo 'Bonjour, tu t\'appelles ' .$_POST['prenom']; } ?> <p>Un paragraphe</p> </body> </html>
Ici, on définit la méthode post
comme méthode d’envoi du formulaire et la page cours.php
comme page de traitement des données (la page où les données du formulaire devront être envoyées).
Dans le cas présent, cette page est la même que la page dans laquelle se situe le formulaire, ce qui signifie que les données seront envoyées vers notre page courante. On va donc les récupérer dans notre page.
Notre formulaire en soi ne contient qu’un champ input
qui va demander un prénom ainsi qu’un bouton d’envoi.
Pour récupérer les données envoyées dans notre script PHP, nous allons utiliser la superglobale $_POST
. Cette superglobale est un tableau associatif qui prend en clefs les noms passés via les attributs name
de nos formulaires.
On va commencer dans notre script PHP par créer une condition pour vérifier qu’un prénom a bien été envoyé en vérifiant que $_POST['prenom']
ait bien une valeur associée grâce à la fonction isset()
qui sert à vérifier si une variable a bien été définie et est différente de NULL
.
Si la variable existe bien, isset()
retourne true
et le test de notre condition est vérifié. Dans le cas contraire, isset()
renvoie false
et le test de notre condition échoue et le code dans la condition n’est donc pas exécuté.
Ici, le code de notre condition sert simplement à afficher la valeur envoyée via le formulaire.
La variable superglobale $_COOKIE
La superglobale $_COOKIE
est un tableau associatif qui contient toutes les variables passées via des cookies HTTP. Nous allons étudier cette variable superglobale en détail dans la suite de ce cours.
La variable superglobale $_SESSION
La superglobale $_SESSION
est un tableau associatif qui contient toutes les variables de session. Nous allons étudier cette variable superglobale en détail dans la suite de ce cours.