PHP Manual
/
Variables

Variables superglobales

01. 11. 2019

Les variables superglobales sont utilisées pour transmettre l'état global de l'application et la communication HTTP.

Le principal avantage de ces variables est qu'elles sont toujours et partout disponibles. En pratique, il s'agit de tableaux de valeurs où l'on accède à des informations spécifiques par index. Dans différents contextes, la disponibilité des clés peut varier (expliqué ci-dessous).

Types de variables superglobales

Tous les superglobals en PHP sont des tableaux et sont désignés par un signe dollar suivi d'un underscore (sauf $GLOBALS) et de caractères majuscules.

Dans PHP 7, il y a notamment les éléments suivants :

Variable Description
$_GET Paramètres URL envoyés par la méthode GET
$_POST Données du formulaire envoyé par POST. Notez que peut se comporter différemment en ajax.
$_REQUEST Données de formulaire envoyées par une méthode quelconque ($_GET, $_POST et $_REQUEST).
$_FILES Informations techniques sur les fichiers actuellement téléchargés, par exemple via la construction <input type="file">.
$_SERVER Paramètres du serveur web, adresse IP, configuration... elle varie en fonction de l'environnement (lors de l'appel d'un script PHP depuis Terminal, elle contiendra des valeurs différentes et par exemple les informations sur la requête en cours seront manquantes).
$_COOKIE Configuré cookies.
$_SESSION Données de la session (session), si elle existe et a été définie dans le passé.
$GLOBALS Attention, il ne contient pas de trait de soulignement dans le nom! C'est ce qu'on appelle global-variable et une notation alternative pour le mot-clé global. Si vous avez une variable globale $variable dans votre application, vous pouvez également y accéder avec la construction $GLOBALS["variable"]. Cependant, l'utilisation de variables globales est une solution mauvaise et impure par conception, il vaut donc mieux ne pas la faire.
$_ENV Informations sur l'environnement actuel où PHP est exécuté.

Il est facile de répertorier toutes les valeurs existantes :

foreach ($_SERVER as $key => $value {
echo $key . ':' . $value . '<br>';
}

Note : Tous les index ne doivent pas toujours exister (par exemple, si le script exécute cron en mode CLI, l'index avec l'URL de la page ou l'adresse IP de la requête n'existera pas).

Accès aux variables

Je recommande que toutes les variables globales (sauf $_SESSION) soient en lecture seule. En effet, ils contiennent des données d'application globales et d'autres codes peuvent en tenir compte (par exemple, une autre bibliothèque installée).

Un autre inconvénient de l'état global est que vous ne pouvez pas toujours compter sur des valeurs exactes, même si elles existent, donc vous devriez toujours vérifier leurs clés avec la construction isset().

Pour enregistrer un nouveau cookie, utilisez setcookie() et n'insérez pas la valeur directement. Cela est dû au fait qu'il est en lecture seule.

Les leçons apprises

Ne faites jamais aveuglément confiance aux valeurs des variables superglobales !

L'utilisateur peut utiliser l'URL et les en-têtes envoyés pour influencer la manière dont les valeurs sont définies. Toutes les entrées doivent toujours être soigneusement validées.

Les globaux de registre - le problème avec l'ancienne version de PHP

Dans l'ancienne version de PHP (jusqu'à 5.4.0), il y avait une directive spéciale register-globals (configurable dans php.ini) qui faisait que tous les paramètres passés dans une URL étaient automatiquement enregistrés comme variables.

Par exemple :

Un utilisateur est arrivé à l'URL : https://example.com/script.php?var=24.

Et PHP a automatiquement créé une variable $var avec la valeur 24 dans le script.

Cela a donc fonctionné de manière classique :

echo $var;

N'importe qui pourrait donc glisser n'importe quelle variable dans le script et en modifier le contenu. De toute évidence, la sécurité n'a pas toujours été une priorité. Pas vraiment.

Autres sources

Pour une description plus détaillée, voir le manuel officiel.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
6.
Status:
All systems normal.
2024