Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

$HTTP_SERVER_VARS [eliminado]

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

$_SERVIDOR -- $HTTP_SERVER_VARS [eliminado]Información del servidor y tiempo de ejecución

Descripción

La variable $_SERVER es una matriz que contiene información como encabezados de secuencias de comandos, rutas y ubicaciones. Las entradas en esta matriz son creadas por el servidor web. No hay garantía de que cada servidor web proporcione alguno de estos; el servidor puede omitir algunos de estos o proporcionar otros que no se enumeran aquí. Sin embargo, muchas de estas variables están presentes en la especificación » CGI/1.1, por lo que puede esperar que también se implementen en un servidor web en particular.

La variable $HTTP_SERVER_VARS contiene la misma información inicial, pero no es una superglobal. (Tenga en cuenta que $HTTP_SERVER_VARS y $_SERVER son variables diferentes, por lo que PHP las maneja en consecuencia). También tenga en cuenta que las "matrices largas" se eliminaron en PHP 5.4.0, por lo que $HTTP_SERVER_VARS ya no existe.

Índices

Puede o no encontrar alguno de los siguientes elementos en la matriz $_SERVER. Tenga en cuenta que pocos elementos, si es que hay alguno, estarán disponibles (o realmente importarán) si PHP se ejecuta en la línea de comandos.

"PHP_SELF" El nombre de archivo del script que se está ejecutando actualmente, relativo a la raíz del documento. Por ejemplo, $_SERVER["PHP_SELF"] en un script en http://example.com/foo/bar.php sería /foo/bar.php . La constante __FILE__ contiene la ruta completa y el nombre de archivo del archivo actual (es decir, incluido). Si PHP se está ejecutando en línea de comando, esta variable contiene el nombre del script desde PHP 4.3.0. Anteriormente no estaba disponible."argv" Una matriz de argumentos pasados ​​al script. Cuando el script se ejecuta en la línea de comandos, otorga acceso similar a C a las opciones de la línea de comandos. Cuando se llama a través del método GET, esta matriz contendrá la cadena de consulta."argc" Contiene el número de parámetros pasados ​​al script (si se inicia en la línea de comando)."GATEWAY_INTERFACE" Contiene la versión de la especificación CGI utilizada por el servidor; Por ejemplo" CGI/1.1". "SERVER_ADDR" La dirección IP del servidor donde se ejecuta el script actual."NOMBRE DEL SERVIDOR" El nombre del host donde se ejecuta el script actual. Si el script se ejecuta en un host virtual, este contendrá el nombre definido para él. anfitrión virtual. "SERVIDOR_SOFTWARE" La cadena de identificación del servidor especificada en los encabezados cuando se responde la solicitud."PROTOCOLO_SERVIDOR" El nombre y versión del protocolo de información a través del cual se solicitó la página; Por ejemplo " HTTP/1.0"; " SOLICITUD_MÉTODO " Qué método se utilizó para solicitar la página; Por ejemplo " CONSEGUIR", "CABEZA", "CORREO", "PONER".

Comentario:

La secuencia de comandos PHP finaliza después de enviar encabezados (es decir, después de realizar cualquier salida sin almacenamiento en búfer de salida), si la solicitud se realizó con el método CABEZA.

" TIEMPO REQUERIDO " Marca de tiempo del inicio de la solicitud. Disponible desde PHP 5.1.0." SOLICITUD_TIME_FLOAT " La marca de tiempo del comienzo de la solicitud, con una precisión de microsegundos. Disponible desde PHP 5.4.0." QUERY_STRING " La cadena de consulta, si la hay, con la que se recuperó la página."RAIZ DEL DOCUMENTO" El directorio raíz del documento donde se ejecuta el script actual es exactamente el especificado en archivo de configuración servidor."HTTP_ACEPTAR" contenido del encabezado aceptar: de la solicitud actual, si la hubiere."HTTP_ACCEPT_CHARSET" contenido del encabezado Aceptar juego de caracteres: de la solicitud actual, si la hubiere. Por ejemplo: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" contenido del encabezado Aceptar codificación: gzip". "HTTP_ACCEPT_LANGUAGE" contenido del encabezado Aceptar-Idioma: de la solicitud actual, si la hubiere. Por ejemplo: " es". "HTTP_CONEXIÓN" contenido del encabezado conexión: de la solicitud actual, si la hubiere. Por ejemplo: " Mantener viva". "HTTP_HOST" contenido del encabezado anfitrión: de la solicitud actual, si la hubiere."HTTP_REFERER" La dirección de la página (si la hay) que trajo el navegador del usuario a esta página. Este encabezado lo establece el navegador web del usuario. No todos los navegadores lo instalan y algunos permiten cambiar el contenido del encabezado HTTP_REFERER como una función adicional. En una palabra, realmente no se puede confiar en él."HTTP_USER_AGENT" contenido del encabezado Agente de usuario: de la solicitud actual, si la hubiere. Esta cadena contiene la designación del navegador con el que el usuario solicitó esta página. Un ejemplo típico es la línea: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Entre otras cosas, puede usar este valor con la función obtener_navegador() para adaptar la salida de su página a las capacidades del navegador del usuario"https" Toma un valor no vacío si la solicitud se realizó a través del protocolo HTTPS.

Comentario: Tenga en cuenta que al usar ISAPI con IIS, el valor será apagado si la solicitud no se realizó a través del protocolo HTTPS.

"REMOTE_ADDR" La dirección IP desde la que el usuario está viendo la página actual."SERVIDOR REMOTO" El host remoto desde el que el usuario está viendo la página actual. La búsqueda inversa de DNS se basa en el valor de la variable REMOTE_ADDR.

Comentario: Su servidor web debe estar configurado para crear esta variable. Por ejemplo, en Apache necesitas la presencia de la directiva Búsquedas de nombre de host activadas en el archivo httpd.conf para que se cree esta variable. ver también gethostbyaddr().

"PUERTO REMOTO" El puerto en la máquina remota que se utiliza para comunicarse con el servidor web."USUARIO_REMOTO" El usuario autenticado."REDIRECT_REMOTE_USER" El usuario autenticado, si la solicitud se redirigió internamente."SCRIPT_NOMBRE DE ARCHIVO"

La ruta absoluta al script que este momento está siendo ejecutado.

Comentario:

Si el script se ejecuta en la línea de comandos (CLI) usando una ruta relativa como file.php o ../file.php , la variable $_SERVER["SCRIPT_FILENAME"] contendrá la ruta relativa especificada por el usuario.

"SERVER_ADMIN" Esta variable obtiene su valor (para Apache) de una directiva en el archivo de configuración del servidor. Si el script se ejecuta en un host virtual, este será el valor definido para ese host virtual."PUERTO DE SERVICIO" El puerto en la computadora del servidor que el servidor web usa para conectarse. Para la configuración predeterminada, el valor será " 80 "; utilizando SLL, por ejemplo, este valor será el configurado para conexiones HTTP seguras.

Comentario: Para obtener el puerto físico (real) en Apache 2, debe instalar UseCanonicalName = Activado Y UseCanonicalPhysicalPort = Activado, de lo contrario, este valor puede ser falsificado y no devolver el valor real del puerto físico. Confiar en este valor no es seguro en el contexto de aplicaciones que requieren seguridad mejorada.

"SERVIDOR_SIGNATURE" Una cadena que contiene la versión del servidor y el nombre del host virtual que se agregará a las páginas generadas por el servidor, si está habilitado."RUTA_TRADUCIDA" Ruta basada en el sistema de archivos (no en la raíz del documento) al script actual, después de que el servidor haya realizado cualquier asignación de virtual a real.

Comentario: A partir de PHP 4.3.2, la variable PATH_TRANSLATED ya no se establece implícitamente en Apache 2 SAPI, en comparación con la versión 1 de Apache, donde se establece en el mismo valor que SCRIPT_FILENAME cuando Apache no la utiliza. Este cambio se realizó para cumplir con la especificación CGI, donde la variable PATH_TRANSLATED solo debe existir cuando se define PATH_INFO. Los usuarios de Apache 2 pueden usar la directiva AcceptPathInfo = Activado en el archivo de configuración httpd.conf para establecer la variable PATH_INFO.

"SCRIPT_NOMBRE" Contiene la ruta al script que se está ejecutando actualmente. Esto es útil para páginas que necesitan señalarse a sí mismas. La constante __FILE__ contiene la ruta completa y el nombre del archivo actual (es decir, incluido)." SOLICITUD_URI " El URI que se pasó para acceder a esta página. Por ejemplo, " /index.html". "PHP_AUTH_DIGEST" Al realizar la autenticación HTTP Digest, esta variable se establece en el encabezado "Autorización" enviado por el cliente (que luego debe usarse para la validación adecuada)."PHP_AUTH_USER" Cuando se realiza la autenticación HTTP, esta variable se establece en el nombre de usuario proporcionado por el usuario."PHP_AUTH_PW" Cuando se realiza la autenticación HTTP, esta variable se establece en la contraseña proporcionada por el usuario."TIPO DE AUTENTICACIÓN" Cuando se realiza la autenticación HTTP, esta variable se establece en el tipo de autenticación que se utiliza."RUTA_INFO" Contiene cualquier ruta proporcionada por el usuario después del nombre del script pero antes de la cadena de consulta, si está disponible. Por ejemplo, si se solicita el script actual en la URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , entonces la variable $_SERVER["PATH_INFO"] contendrá /algunas cosas?>

El resultado de ejecutar este ejemplo será algo como esto.

En la segunda lección, escribiremos dos clases más y terminaremos completamente la parte interna del script.

Plan

El objetivo de esta serie de tutoriales es crear una aplicación simple que permita a los usuarios registrarse, iniciar sesión, cerrar sesión y cambiar la configuración. La clase que contendrá toda la información sobre el usuario se llamará User y estará definida en el archivo User.class.php. La clase que se encargará de la entrada/salida se llamará UserTools (UserTools.class.php).

Un poco sobre nombres de clases

El tono correcto es nombrar los archivos de clase con el mismo nombre que la clase misma. De esta manera, es fácil determinar el propósito de cada archivo en la carpeta de la clase.

También es común agregar .class o .inc al final del nombre del archivo de clase. Por lo tanto, definimos claramente el propósito del archivo y podemos usar .htaccess para restringir el acceso a estos archivos.

Clase de usuario (User.class.php)

Esta clase definirá a cada usuario. Con crecimiento esta aplicación la definición de "Usuario" puede cambiar significativamente. Afortunadamente, la programación orientada a objetos facilita la adición de atributos de usuario adicionales.

Constructor

En esta clase, usaremos el constructor: esta es una función que se llama automáticamente cuando se crea la siguiente copia de la clase. Esto nos permite publicar automáticamente algunos atributos después de que se crea el proyecto. En esta clase, el constructor tomará un solo argumento: una matriz asociativa que contiene una fila de la tabla de usuarios en nuestra base de datos.

require_once "db.class.php"; usuario de clase (public $id; public $username; public $hashedPassword; public $email;
public $joinDate;
//Constructor llamado cuando se crea un nuevo objeto//Toma una matriz asociativa con la fila DB como argumento. función __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" nombre de usuario"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" Fecha de Ingreso"] : ""; )
public function save($isNewUser = false) ( //crea un nuevo objeto de base de datos. $db = new DB(); //si el usuario ya está registrado y //solo estamos actualizando su información. if(!$isNewUser ) ( // establece la matriz de datos $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"correo" => ""$este->correo"");
//actualiza la fila en la base de datos $db->update($data, "users", "id = ".$this->id); )else ( //si el usuario se registra por primera vez. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); $this-> id = $db->insert($datos, "usuarios"); $this->joinDate = time(); ) return true; ) ) ?>

Explicación

La primera parte del código, fuera de la zona de clase, proporciona la conexión de la clase a la base de datos (porque hay una función en la clase Usuario que requiere esta clase).

En lugar de variables de clase "protegidas" (usadas en la Lección 1), las definimos como "públicas". Esto significa que cualquier código fuera de la clase tiene acceso a estas variables cuando se trabaja con el objeto Usuario.

El constructor toma una matriz en la que las columnas de la tabla son las claves. Definimos la variable de clase usando $this->variablename. En el ejemplo de esta clase, en primer lugar comprobamos si existe el valor de una determinada clave. Si es así, establecemos la variable de clase en ese valor. De lo contrario, una cadena vacía. El código utiliza la forma abreviada de la notación de facturación si:

$valor = (3 == 4) ? "A" : "B";

En este ejemplo, ¡estamos comprobando si 3 es igual a cuatro! Si es así, entonces $valor = "A", no - $valor = "B". En nuestro ejemplo, el resultado es $valor = “B”.

Guardar información sobre los usuarios en la base de datos.

La función de guardar se utiliza para realizar cambios en la tabla de la base de datos con los valores actuales en el objeto Usuario. Esta función usa la clase DB que creamos en el primer tutorial. Usando variables de clase, se establece la matriz $data. Si esta es la primera vez que se almacena el usuario, $isNewUser se pasa como $true (el valor predeterminado es falso). Si $isNewUser = $true, se llama a la función insert() de la clase DB. De lo contrario, se llama a la función actualizar(). En ambos casos, la información del objeto de usuario se almacenará en la base de datos.

Clase UserTools.class.php

Esta clase contendrá funciones relacionadas con los usuarios: login(), logout(), checkUsernameExists() y get(). Pero con la expansión de esta aplicación, puedes agregar muchas más.

//UserTools.class.php require_once "User.class.php"; require_once "db.class.php";
clase herramientas de usuario (
//Iniciar sesión del usuario. Primero verifica si //el nombre de usuario y la contraseña coinciden con una fila en la base de datos. //Si tiene éxito, configure las variables de sesión //y almacene el objeto de usuario dentro.
inicio de sesión de función pública ($ nombre de usuario, $ contraseña)
{
$hashedPassword = md5($contraseña); $resultado = mysql_query("SELECCIONE * DE usuarios DONDE nombre de usuario = "$nombre de usuario" Y contraseña = "$hashedPassword""); if(mysql_num_rows($resultado) == 1) ( $_SESSION["usuario"] = serialize(nuevo Usuario(mysql_fetch_assoc($resultado))); $_SESSION["login_time"] = tiempo(); $_SESSION["logged_in "] = 1; devuelve verdadero; )else(devuelve falso; ) )
//Cerrar sesión del usuario. Destruye las variables de sesión. public function logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Comprueba si existe un nombre de usuario. //Esto se llama durante el registro para asegurarse de que todos los nombres de usuario sean únicos. función pública checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; ) else( return true; )
}
//obtiene un usuario //devuelve un objeto Usuario. Toma la identificación de los usuarios como una función pública de entrada get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ) )
?>

función de inicio de sesión ()

La función login() se explica por sí misma. Toma los argumentos de usuario $nombre de usuario y $contraseña y verifica si coinciden. Si todo coincide, crea un objeto Usuario con toda la información y lo almacena en la sesión. Tenga en cuenta que solo estamos usando la función PHP serialize(). Crea una versión persistente del objeto que se puede deserializar fácilmente con unserialize(). También se guardará el tiempo de inicio de sesión. Esto se puede utilizar más tarde para proporcionar a los usuarios información sobre la duración de su estancia en el sitio.

También puede notar que estamos configurando $_SESSION["logged_in"] en 1. Esto nos permite verificar fácilmente en cada página si el usuario ha iniciado sesión. Basta con comprobar sólo esta variable.

función cerrar sesión()

También una función simple. La función unset() de PHP borra las variables en la memoria, mientras que session_destroy() eliminará la sesión.

función checkUsernameExists()

Quien sepa inglés entenderá fácilmente la función. Simplemente consulta la base de datos si se utiliza o no dicho inicio de sesión.

obtener() función

Esta función toma una identificación de usuario única y consulta la base de datos utilizando la clase DB, es decir, la función select(). Tomará una matriz asociativa con alguna información del usuario y creará un nuevo objeto Usuario, pasando la matriz al constructor.

¿Donde puede ser usado? Por ejemplo, si crea una página que necesita mostrar perfiles de usuario específicos, deberá tomar esta información de forma dinámica. Así es como puede hacerlo: (digamos que la URL es http://www.website.com/profile.php?userID=3)

//nota: primero tendrá que abrir una conexión a la base de datos. //Consulte la Parte 1 para obtener más información sobre cómo hacerlo. //También deberá asegurarse de haber incluido los archivos de clase.
$herramientas = new UserTools(); $usuario = $herramientas->get($_REQUEST["userID"]); echo "Nombre de usuario: ".$usuario->nombre de usuario.""; echo "Unido el: ".$usuario->fechadeunión."";

¡Fácilmente! ¿Es verdad?

Toque final del lado del servidor: global.inc.php

Se requiere global.inc.php para cada página del sitio. ¿Por qué? De esta manera colocaremos todas las operaciones habituales que necesitamos en la página. Por ejemplo, iniciaremos session_start(). La conexión a la base de datos también se abrirá.

require_once "clases/UserTools.class.php";
require_once "clases/DB.class.php";
//conectar a la base de datos $db = new DB(); $bd->conectar();
//inicializa el objeto UserTools $userTools = new UserTools(); //iniciar la sesion
sesión_inicio();
//actualizar las variables de sesión si inició sesión if(isset($_SESSION["logged_in"])) ($usuario = unserialize($_SESSION["usuario"]); $_SESSION["usuario"] = serialize($userTools-> get($usuario->id)); ) ?>

¿Qué está haciendo?

Aquí están pasando varias cosas. En primer lugar, abrimos una conexión a la base de datos.

Después de conectarnos, iniciamos la función session_start(). La función crea una sesión o continúa la actual si el usuario ya ha iniciado sesión. Dado que nuestra aplicación está diseñada para que los usuarios inicien/cierren sesión, esta función es obligatoria en todas las páginas.

A continuación, comprobamos si el usuario ha iniciado sesión. Si es así, actualizaremos $_SESSION["usuario"] para mostrar la información de usuario más reciente. Por ejemplo, si un usuario cambia su correo electrónico, la sesión aún almacenará el anterior. Pero con la ayuda de la actualización automática, esto no sucederá.

¡Aquí concluye la segunda parte! Mañana espera la lección final sobre este tema.

¡Mis mejores deseos!

Los que más o menos seriamente estudiaron PHP saber que hay una matriz global muy útil en PHP, Lo que es llamado $_SERVIDOR. Y en este artículo me gustaría analizar las claves más populares y sus valores en esta matriz, ya que su conocimiento es simplemente necesario incluso para un principiante. programador PHP.

Antes de proceder a a la matriz global $_SERVER en PHP Solo te daré una pequeña pista. Hay una característica maravillosa incorporada PHP, Lo que es llamado phpinfo(). Demos inmediatamente un ejemplo de su uso:

phpinfo();
?>

Como resultado de la ejecución de este sencillo script, verá una gran tabla con varios Configuración del intérprete de PHP, incluso, cerca del final habrá una tabla de valores matriz global $_SERVER. Enumerará todas las claves y todos sus valores correspondientes. ¿Cómo puede ayudarte esto? Y el hecho de que si necesita este o aquel valor, y olvida cómo se llama la clave, entonces use la función phpinfo() Siempre puedes recordar su nombre. En general, ejecutará este script e inmediatamente me entenderá.

Ahora pasemos a los más populares. claves de matriz $_SERVER:

  • HTTP_USER_AGENT- esta clave le permite conocer las características del cliente. En la mayoría de los casos, este es definitivamente el navegador, sin embargo, no siempre. Y nuevamente, si el navegador, entonces cuál, puede averiguarlo en esta variable.
  • HTTP_REFERER- contiene la ruta absoluta a ese archivo ( secuencia de comandos PHP, página HTML) desde el que cambió a este script. En términos generales, ¿de dónde vino el cliente?
  • SERVIDOR_ADDR - dirección IP servidor.
  • DIRECCIÓN_REMOTA - dirección IP cliente.
  • RAIZ DEL DOCUMENTO- ruta física al directorio raíz del sitio. Esta opción se establece mediante Archivo de configuración del servidor Apache.
  • SCRIPT_NOMBRE DE ARCHIVO- ruta física al script llamado.
  • QUERY_STRING- un valor muy útil que le permite obtener una cadena con una consulta, y luego puede analizar esta cadena.
  • SOLICITUD_URI- un valor aún más útil que contiene no solo la solicitud en sí, sino también la ruta relativa al script llamado desde la raíz junto con ella. Esto se usa muy a menudo para eliminar la duplicación de índice.php, es decir, cuando tenemos tal URL: "http://misitio.ru/index.php" Y " http://misitio.ru/" conducir a una página, y URL diferente, por lo tanto, la duplicación, que tendrá un efecto negativo en la optimización de motores de búsqueda. Y aquí con la ayuda SOLICITUD_URI podemos definir: índice.php o no se llamó el script. Y podemos redirigir con índice.php(si estuviera presente SOLICITUD_URI) encendido sin índice.php. Como resultado, al enviar dicha solicitud: " http://misitio.ru/index.php?id=5", tendremos una redirección a URL: "http://misitio.ru/?id=5". Es decir, nos deshicimos de la duplicación eliminando de URL este índice.php.
  • SCRIPT_NOMBRE- ruta relativa al script llamado.

Tal vez estos son todos los elementos matriz global $_SERVER en PHP que se usan regularmente. Necesitan saber y ser capaces de utilizar cuando sea necesario.

Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
COMPARTIR: