Variables globales de servidor con $_SERVER

 
En PHP, para conseguir información relativa al servidor o a la aplicación cliente que realiza la petición en un script, se dispone de la variable superglobal $_SERVER.

El hecho de que sea una variable superglobal, significa que puede ser accedida en cualquier momento desde cualquier parte de cualquier script, sin necesidad de hacer algo como $GLOBALS["_SERVER"] desde una función o método.

Esta información devuelta por $_SERVER, puede ser útil, para realizar estadísticas de una web, bloquear usuarios por su IP, conocer y modificar el contenido dependiendo el navegador del usuario, acceder a archivos desde el directorio raíz, etc.

$_SERVER contiene un array con información creada por el servidor sobre datos relativos a este y la conexión con el usuario remoto. Debido a que es generado por el servidor, diferentes versiones pueden devolver diferentes elementos en el array.

Algunos de los elementos más comunes que se pueden encontrar en este array, son:

ELEMENTODESCRIPCIÓN
HTTP_ACCEPTMuestra los tipos MIME que la aplicación del cliente acepta.
HTTP_ACCEPT_LANGUAGEIdioma de la aplicación cliente ('en', 'es', ...).
HTTP_USER_AGENTNombre de la aplicación desde donde se realizó la petición.
HTTP_ACCEPT_ENCODINGEl código de codificación que acepta la aplicación cliente.
HTTP_HOSTDevuelve el host del servidor.
HTTP_VIADirección del proxy del usuario, en caso de estar usándose uno.
HTTP_X_FORWARDED_FORDirección IP del usuario dentro de la red del proxy.
REMOTE_ADDRDirección IP desde la que se ha accedido (en caso de proxy, la dirección IP del proxy).
HTTP_CACHE_CONTROLInformación del servidor, de si el documento es "cacheable" (puede guardarse en memoria para en caso de volver a necesitarse no tener que descargarlo) ó no.
En caso de ser cacheable, además puede dar información de donde debe ser guardado (cliente, servidor), así como de la 'caducidad de la cache'.
HTTP_CONNECTIONTipo de conexión establecido (normalmente 'keep-alive').
SERVER_SIGNATUREContiene la versión del servidor, dominio y puerto.
SERVER_SOFTWAREContiene la versión del servidor.
SERVER_NAMEMuestra el nombre del servidor.
SERVER_ADDRDirección IP del servidor.
SERVER_PORTPuerto por el que se ha realizado la petición con el cliente.
DOCUMENT_ROOTDirectorio raíz del servidor para el dominio.
SERVER_ADMINNombre dado al administrador del dominio.
SCRIPT_FILENAMEDirección física en el sistema de archivos del servidor del script en ejecución.
REMOTE_PORTPuerto desde donde el cliente recibe los datos enviados por la conexión.
GATEWAY_INTERFACEVersión del CGI del servidor.
SERVER_PROTOCOLNombre y revisión del tipo de protocolo solicitado.
REQUEST_METHODTipo del método de petición ('GET', 'POST', ...).
QUERY_STRINGla cadena de variables pasadas, en caso de existir. Por ejemplo, en pagina.php?uno=1&dos=2, devolvería uno=1&dos=2
REQUEST_URIURL del script desde el directorio raíz.
SCRIPT_NAMEDirección física del script desde el directorio raíz (no incluye las variables pasadas).
PHP_SELFURL del script hasta la aparición de la primera '?'.
Podría parecer igual que 'SCRIPT_NAME', sin embargo tiene fallos, por ejemplo en el script uno.php/dos.php devolverá uno.php/dos.php, mientras que SCRIPT_NAME, devolverá uno.php.
Por este motivo, es recomendable usar siempre SCRIPT_NAME. Sólo usar PHP_SELF en caso de que sus "características especiales", sean de utilidad por algún motivo.
Siempre teniendo en cuenta los posibles agujeros de seguridad que se pueden crear mediante ataques a la URL que se puedan hacer.
REQUEST_TIMEFecha Unix en que se recibió la petición.


Las cabeceras con el prefijo "HTTP_" contienen los datos enviados por la aplicación cliente, estos datos, por lo tanto podrían ser manipulados y no contener información real.

Estos elementos, como se ha dicho, son los más comunes y suelen estar presentes en la mayoría de servidores, sin embargo, dependiendo del servidor, podrían faltar algunos elementos o incluir otros.

En el código de ejemplo, se muestra una pequeña función que pintaría todos los valores para la variable $_SESSION, con su declaración en código PHP y el valor que devolvería, recorriéndola con un foreach.

También se podrían sacar los datos simplemente con un:

print_r ($_SERVER);

O bien:

var_dump ($_SERVER);


Código:
<?php
    // Copyright © McAnam.com
    // http://www.mcanam.com/articulos/PHP.php?id=19

    function muestra_datos_server()
    {
    
    foreach ($_SERVER as $kElem => $vElem)
     echo "<p>\$_SERVER[\"" . $kElem . "\"] = '" . htmlspecialchars($vElem) . "'</p>";
  
  }
  
  muestra_datos_server();

?>

Links relacionados:
Sesiones. Crear variables de sesión con PHP
Ocultar, mostrar errores de ejecución de PHP
Guardar archivos enviados por un formulario en el servidor
Forzar descarga de ficheros en lado cliente
Formulario para enviar archivos al servidor


Para cualquier duda, consulta, sugerencia, opinión, colaboración, etc; no dude en ponerse en contacto con nosotros

Copyright © 2002-2017 [McAnam]. Reservados todos los derechos.
www.mcanam.com