Les variables superglobales PHP

Dans cette nouvelle partie, nous allons étudier des variables très spéciales et très importantes en PHP : les variables superglobales.

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>

 

Présentation et exemple d'utilisation de la variable superglobale PHP globals

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>

 

Présentation et exemple d'utilisation de la variable superglobale PHP server

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>

 

Présentation et exemple d'utilisation de la variable superglobale PHP env

 

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>

 

Présentation et exemple d'utilisation de la variable superglobale PHP post

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.

Laisser un commentaire