Las superglobales son variables predefinidas de PHP disponibles en cualquier ámbito del script.
En PHP, el término Superglobal se refiere a variables predefinidas (arrays) que están disponibles en cualquier parte de tu código (funciones, clases, archivos incluidos) sin necesidad de declararlas con global $variable.
Son los “ojos y oídos” de PHP: contienen toda la información sobre quién visita la página, qué datos envía y en qué entorno se está ejecutando el servidor.
$_SERVER: información del entorno y la petición
Es, con diferencia, la más usada para lógica de enrutamiento y detección. Es un array gigante generado por el servidor web (Apache, Nginx) que le pasa datos a PHP.
Contiene información técnica sobre la visita.
Índices más importantes:
| Índice | Descripción | Ejemplo de uso |
|---|---|---|
$_SERVER['REQUEST_METHOD'] | Método usado (GET, POST, PUT…). | Saber si se envió un formulario o solo se visitó la página. |
$_SERVER['REQUEST_URI'] | La dirección URL que se pidió. | Fundamental para crear “Enrutadores” (Routers). |
$_SERVER['REMOTE_ADDR'] | La dirección IP del visitante. | Bloquear IPs o guardar registros de seguridad. |
$_SERVER['HTTP_USER_AGENT'] | Navegador y S.O. del usuario. | Detectar si es móvil (aunque es mejor usar CSS). |
$_SERVER['DOCUMENT_ROOT'] | La carpeta raíz del servidor. | Para incluir archivos de forma absoluta y segura. |
Ejemplo Práctico: Imagina que quieres ejecutar código solo si el usuario envió datos (POST), no si solo entró a mirar (GET).
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo "¡Has enviado el formulario!";
// Aquí procesaríamos los datos
} else {
echo "Estás viendo la página (Método GET)";
}Algunos datos de $_SERVER (como HTTP_USER_AGENT o HTTP_REFERER) son enviados por el navegador del usuario y pueden ser falsificados. Nunca confíes ciegamente en ellos para seguridad crítica.
$_ENV: variables de entorno y secretos
Las variables de entorno permiten separar la configuración del código. En desarrollo profesional, no escribimos contraseñas directamente en el repositorio ($password = '1234').
$_ENV puede exponer las variables que el sistema operativo o el servidor pasa a PHP. Su disponibilidad depende de la configuración variables_order; getenv() es otra forma de consultarlas.
¿Por qué usar $_ENV?
- Seguridad: Si subes tu código a GitHub, no subes tus contraseñas reales.
- Flexibilidad: En tu ordenador (Local) la base de datos es
localhost, pero en producción es una IP de Amazon AWS. El código no cambia, solo cambia el entorno.
// Forma correcta de conectar a una BD moderna
$host = $_ENV['DB_HOST']; // Viene de la config del servidor
$user = $_ENV['DB_USER'];
$pass = $_ENV['DB_PASS'];En proyectos modernos se suelen usar librerías como phpdotenv para cargar estas variables desde un archivo .env)
El resto de la familia (resumen)
El resto de superglobales son tan importantes que tienen sus propios apartados en este módulo, pero es bueno que sepas que todas funcionan igual: son arrays accesibles desde cualquier lado.
$_GET: Datos enviados por la URL (?id=5).$_POST: Datos enviados por formulario invisible.$_FILES: Archivos subidos.$_COOKIE: Datos guardados en el navegador del usuario.$_SESSION: Datos guardados en el servidor asociados al usuario.