Les superglobales PHP
Les superglobales PHP sont des variables prédéfinies disponibles dans tous les contextes. Découvrez $_GET, $_POST, $_SESSION et plus encore.
Les superglobales PHP
Les superglobales sont des variables PHP intégrées qui sont toujours disponibles, dans tous les contextes, sans aucune déclaration. Contrairement aux variables ordinaires, vous n'avez pas besoin d'écrire global $var; pour les utiliser à l'intérieur d'une fonction — elles sont visibles partout automatiquement. Elles constituent le pont entre le monde extérieur (le navigateur, le serveur web, le système d'exploitation) et votre script PHP : les données de formulaire entrantes, les cookies, l'état de session et les métadonnées de requête arrivent tous via les superglobales.
Ce chapitre explique ce que contient chaque superglobale, quand l'utiliser et les pièges de sécurité qui font trébucher la plupart des débutants.
Que sont les superglobales PHP ?
Une superglobale est un tableau associatif prédéfini que PHP remplit pour vous avant l'exécution de votre script. Il en existe neuf :
| Superglobale | Contient | Utilisation typique |
|---|---|---|
$_GET | Paramètres de la chaîne de requête (?key=value) | Recherche, pagination, filtres |
$_POST | Champs de formulaire soumis dans le corps de la requête | Connexion, inscription, saisie de données |
$_REQUEST | Fusion de $_GET, $_POST et $_COOKIE | Commodité (à utiliser avec précaution) |
$_FILES | Fichiers téléversés via un formulaire multipart | Téléversement de fichiers / d'images |
$_COOKIE | Cookies envoyés par le navigateur | « Se souvenir de moi », préférences |
$_SESSION | Données par utilisateur stockées sur le serveur | État de connexion, paniers d'achat |
$_SERVER | Informations sur le serveur et la requête (en-têtes, chemins) | Routage, détection de la méthode HTTP |
$_ENV | Variables d'environnement | Configuration, secrets, clés API |
$GLOBALS | Toutes les variables dans la portée globale | Accéder aux globales depuis une fonction |
Puisque ce sont des tableaux, vous lisez une valeur par clé — par exemple $_GET['name'] — et vous pouvez inspecter l'ensemble du tableau avec print_r() ou var_dump() lors du débogage.
La sécurité avant tout. Tout ce qui se trouve dans
$_GET,$_POST,$_REQUEST,$_COOKIEet$_FILESprovient de l'utilisateur et doit être traité comme non fiable. Vérifiez toujours qu'une clé existe, puis validez et échappez-la avant utilisation. Négliger cela ouvre la porte aux failles XSS, aux injections SQL et à une logique défaillante.
$_GET
$_GET collecte les paramètres de la chaîne de requête de l'URL. Pour l'URL example.com/?name=John&page=2, PHP remplit $_GET comme suit :
// URL: example.com/?name=John&page=2
$_GET = ['name' => 'John', 'page' => '2'];
$name = $_GET['name'] ?? 'guest'; // 'John'
$page = (int) ($_GET['page'] ?? 1); // 2
echo "Hello, $name — viewing page $page";Utilisez $_GET pour les données qu'il est sûr d'exposer dans l'URL et qui peuvent être mises en signet ou partagées : termes de recherche, numéros de page, ordre de tri. Notez l'opérateur ?? (coalescence nulle) — il fournit une valeur par défaut pour éviter l'avertissement « undefined array key » lorsqu'une clé est absente. Ne mettez jamais de mots de passe ou de données sensibles dans $_GET, car l'URL est journalisée, mise en cache et visible dans la barre d'adresse.
$_POST
$_POST collecte les données envoyées dans le corps de la requête HTTP, généralement depuis un formulaire avec method="post". Les valeurs ne sont pas affichées dans l'URL, ce qui fait de $_POST le bon choix pour les formulaires de connexion et toute action qui modifie des données.
// <form method="post"><input name="email"> ... </form>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = trim($_POST['email'] ?? '');
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Stored: $email";
} else {
echo "Please enter a valid email address.";
}
}$_GET et $_POST sont tous deux essentiels pour travailler avec des formulaires — consultez Gestion des formulaires PHP et Validation des formulaires PHP pour des exemples complets et validés.
$_REQUEST
$_REQUEST est un tableau de commodité qui fusionne $_GET, $_POST et $_COOKIE. Il vous permet de lire une valeur quel que soit le mode d'envoi :
$id = $_REQUEST['id'] ?? null;Utilisez-le avec parcimonie. L'ordre dans lequel les trois sources s'écrasent mutuellement est contrôlé par le paramètre request_order dans php.ini, ce qui signifie qu'un cookie pourrait silencieusement écraser un champ POST. Pour un code prévisible et sécurisé, préférez la superglobale spécifique ($_GET ou $_POST) que vous attendez réellement.
$_FILES
$_FILES contient les métadonnées sur les fichiers téléversés via un formulaire qui utilise enctype="multipart/form-data". Pour un champ nommé avatar, vous obtenez un tableau avec le nom d'origine, le type MIME, le chemin temporaire, le code d'erreur et la taille :
// <form method="post" enctype="multipart/form-data">
// <input type="file" name="avatar">
// </form>
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
$tmp = $_FILES['avatar']['tmp_name'];
$name = basename($_FILES['avatar']['name']);
move_uploaded_file($tmp, __DIR__ . "/uploads/$name");
echo "Uploaded $name";
}Vérifiez toujours la clé error et validez le type et la taille du fichier avant d'appeler move_uploaded_file() — ne faites jamais confiance au name ou au type fournis par le client.
$_COOKIE
$_COOKIE contient les cookies envoyés par le navigateur avec la requête. Un cookie est un petit élément de données stocké dans le navigateur et renvoyé à chaque requête ultérieure, utile pour mémoriser des préférences ou un jeton « rester connecté ».
// Cookies are set with setcookie(), then read on the NEXT request:
setcookie('theme', 'dark', time() + 86400); // expires in 1 day
$theme = $_COOKIE['theme'] ?? 'light';
echo "Current theme: $theme";Un cookie défini avec setcookie() n'est pas disponible dans $_COOKIE avant la prochaine requête, car il voyage d'abord vers le navigateur puis revient ensuite. Pour le cycle de vie complet, consultez Les cookies PHP.
$_SESSION
$_SESSION stocke les données par utilisateur sur le serveur, identifiées par un ID de session qui circule dans un cookie. Comme les données résident sur le serveur, elles sont plus sûres qu'un cookie pour les états sensibles tels que « est-ce que cet utilisateur est connecté ».
Vous devez appeler session_start() avant de lire ou d'écrire dans $_SESSION :
session_start();
$_SESSION['user_id'] = 42; // write
$id = $_SESSION['user_id'] ?? 0; // read on any page
echo "Logged-in user: $id";Consultez Les sessions PHP pour un exemple de connexion complet et des détails sur la durée de vie des sessions.
$_SERVER
$_SERVER est rempli par le serveur web avec des informations sur la requête et l'environnement. Clés courantes :
$method = $_SERVER['REQUEST_METHOD']; // 'GET' or 'POST'
$host = $_SERVER['HTTP_HOST']; // 'www.example.com'
$uri = $_SERVER['REQUEST_URI']; // '/products?id=5'
$ip = $_SERVER['REMOTE_ADDR']; // visitor's IP address
if ($method === 'POST') {
echo "Handling a form submission from $ip";
}$_SERVER['REQUEST_METHOD'] est la méthode standard pour savoir si une page a été chargée normalement (GET) ou si un formulaire a été soumis (POST).
$_ENV et $GLOBALS
$_ENV expose les variables d'environnement du système d'exploitation, là où les applications modernes stockent leur configuration et leurs secrets pour qu'ils restent hors du code source :
$dbHost = $_ENV['DB_HOST'] ?? 'localhost';
$apiKey = getenv('API_KEY'); // getenv() also reads the environment$GLOBALS est un tableau de toutes les variables définies dans la portée globale. Il permet à une fonction d'accéder à une variable globale sans le mot-clé global :
$counter = 10;
function increment() {
$GLOBALS['counter']++; // modifies the global $counter
}
increment();
echo $counter; // 11$GLOBALS est rarement le bon outil — passer des données en tant qu'arguments de fonction est plus propre. Pour comprendre pourquoi, lisez La portée des variables PHP.
Conclusion
Les superglobales PHP sont le moyen standard de lire les entrées et les informations de requête dans une application web PHP. Utilisez $_GET pour les paramètres d'URL, $_POST pour les soumissions de formulaires, $_FILES pour les téléversements, $_COOKIE et $_SESSION pour l'état par utilisateur, et $_SERVER/$_ENV pour les détails de requête et d'environnement. La règle qui s'applique à toutes : les données provenant du navigateur sont non fiables — validez-les et échappez-les à chaque fois. Poursuivez avec Validation des formulaires PHP pour voir ces superglobales appliquées à un formulaire réel et sécurisé.