Menú
Es gratis
registrarse
el principal  /  Consejo / Variables de entorno php. Todo lo que debe saber sobre la traducción de variables de entorno PHP

Variables de entorno php. Todo lo que debe saber sobre la traducción de variables de entorno PHP

¡Atención! El artículo fue escrito en Windows 7, pero existen diferencias fundamentales al agregar PHP a variables de entorno otras versiones (Windows XP, Windows Vista, Windows 8, ...) no lo hacen.

¡Información! Todas las rutas en la configuración se especificarán en función del hecho de que Denwer está instalado en la carpeta D: / web. Cuando utilice los datos del artículo, no olvide cambiar esta ruta por la suya.

Para conveniente usando PHP en la consola de Windows, debe configurar las variables de entorno. De lo contrario, cuando trabaje con PHP a través de la consola, en lugar del comando php, deberá escribir la ruta completa al archivo php.exe.

Supongamos que tenemos Denwer instalado en la carpeta D: / web.

Haga clic con el botón derecho en el icono "Equipo" Propiedades:

Parámetros adicionales del sistema:

Pestaña Avanzado, botón Configuración del entorno ...

Grupo " Parámetros del sistema", seleccione la variable Ruta y presione el botón editar:

Agregue la línea D: \\ web \\ usr \\ local \\ php5; y haga clic en el botón "Aceptar":

Reinicie Denwer. Ahora puede abrir la consola (Win + R y escribir cmd) y verificar trabajo PHP , ingrese el comando:

Para corregir estos errores, abra el archivo D: /web/usr/local/php5/php.ini. Busque las variables extension_dir, zend_extension, session.save_path y establézcalas en los siguientes valores.

Variables de entorno

Variables de entorno en PHP

Inmediatamente antes de iniciar el script, el servidor le pasa algunas variables de entorno con información. Algunas variables contienen algunos encabezados, pero no todos (no puede obtener todos los encabezados). A continuación, proporcionaré una lista de las variables de entorno más importantes.

HTTP_ACCEPT

Esta variable enumera todos Tipos de datos MIMEque puede ser percibido por el navegador. La línea * / * significa que el navegador comprende cualquier tipo.

HTTP_ACCEPT \u003d imagen / gif, imagen / x-xbitmap, imagen / jpeg, imagen / pjpeg, aplicación / x-shockwave-flash, aplicación / vnd.ms-excel, aplicación / msword, * / *

HTTP_REFERER

Esta variable representa información sobre la página desde la que el usuario llegó a la determinada. Puede usar esta variable, por ejemplo, para rastrear el movimiento de un usuario en su sitio y luego ver las rutas más populares.

HTTP_REFERER \u003d http://www.spravkaweb.ru/php/pril/

HTTP_COOKIE

Esta variable almacena todas las cookies codificadas en URL.

HTTP_COOKIE \u003d hotlog \u003d 1; ZDEDebuggerPresent \u003d php, phtml, php3; b \u003d b; PHPSESSID \u003d

HTTP_USER_AGENT

Identifica el navegador del usuario. Para establecer el tipo de navegador, debe verificar en esta línea la presencia de palabras: si el navegador - explorador de Internet, entonces estará presente la subcadena MSIE, y si solo hay la palabra Mozilla, entonces es Netscape.

Por ejemplo:

HTTP_USER_AGENT \u003d Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

Contiene nombre de dominio El servidor web en el que se ejecutó el script. Esta variable es lo suficientemente conveniente para usar, por ejemplo, para generar la ruta completa, que se requiere en el encabezado Ubicación, para no vincularse a un servidor específico.

HTTP_HOST \u003d www.spravkaweb.ru

HTTP_FROM

La dirección correo electrónico el usuario que realizó la solicitud.

NOMBRE DEL SERVIDOR

Nombre de dominio o dirección IP del servidor.

SERVER_NAME \u003d www.spravkaweb.ru

SERVER_SOFTWARE

El nombre y la versión del programa del servidor que responde a la solicitud del cliente.

PUERTO DE SERVICIO

Esta variable contiene el puerto del servidor al que accede el navegador del usuario. Normalmente es 80. La variable también se puede utilizar para formar el parámetro de encabezado de ubicación.

SERVER_PROTOCOL

La variable contiene el nombre y la versión del protocolo de información que se utilizó para la solicitud.

SERVER_PROTOCOL \u003d HTTP / 1.1

REMOTE_ADDR

Esta variable contiene la dirección IP (o nombre de dominio) del nodo del usuario en el que se inició el navegador.

PUERTO REMOTO

Un puerto que se asigna al navegador del usuario para recibir una respuesta del servidor.

REMOTE_USER

El nombre de identificación del usuario que realiza la solicitud.

SCRIPT_NAME

Contiene el nombre del archivo que contiene este script. Esta variable es conveniente de usar cuando se forma el encabezado de ubicación cuando se redirige a sí mismo (autodirección), así como para sustituir el valor del atributo de acción de la etiqueta.

en la página a la que llama el script cuando se inicia sin parámetros (para no vincularse a un nombre de script específico).

RAIZ DEL DOCUMENTO

El directorio raíz del árbol de documentos web.

REQUEST_METHOD

El método que usa el usuario al transferir datos. Cabe señalar que un script bien redactado debe determinar por sí mismo, en función de esta variable, qué método utiliza el usuario y recibir datos de la fuente adecuada, y no asumir que la transferencia se llevará a cabo, por ejemplo, solo por el Método POST.

QUERY_STRING

Contiene parámetros que se especifican en la URL después del signo de interrogación. Recordemos que están disponibles tanto con el método GET como con el método POST (si en este último caso se definieron en atributo de acción etiqueta ).

PATH_INFO

Contiene información adicional sobre el camino.

PATH_TRANSLATED

La misma información que en la variable PATH_INFO con un prefijo que especifica la ruta al directorio raíz del árbol de documentos web.

TIPO DE CONTENIDO

Tipo de medio de datos de solicitud.

LARGANCIA DE CONTENIDO

Devuelve el número de bytes de datos enviados por el usuario. Esta variable debe analizarse si acepta y procesa un formulario POST.

GATEWAY_INTERFACE

La versión CGI que está usando el servidor.

Ejemplo de uso de variables de entorno

Variables

En PHP, las variables comienzan con un signo de dólar ( $ ). Este carácter puede ir seguido de cualquier número de caracteres alfanuméricos y de subrayado, pero el primer carácter no puede ser un número o un subrayado. También debe recordarse que los nombres de las variables PHP distinguen entre mayúsculas y minúsculas, a diferencia de las palabras clave.

Al declarar variables en PHP, no es necesario especificar explícitamente el tipo de variable, y la misma variable puede tener diferentes tipos en todo el programa.

La variable se inicializa en el momento de asignarle un valor y existe mientras se ejecuta el programa. Es decir, en el caso de una página web, esto significa hasta que se complete la solicitud.

Variables externas

Una vez que el servidor web analiza la solicitud del cliente y la pasa a la máquina PHP, esta última establece una serie de variables que contienen datos relacionados con la solicitud y están disponibles en todo momento de su ejecución. PHP primero toma variables de entorno Su sistema y crea variables con los mismos nombres y valores en el entorno de script PHP para que los scripts ubicados en el servidor puedan acceder a las funciones del sistema del cliente. Estas variables se colocan en matriz asociativa $ HTTP_ENV_VARS (Para obtener más información sobre matrices, consulte el Capítulo 4).

Naturalmente, variables de matriz $ HTTP_ENV_VARS dependen del sistema (ya que en realidad variables de entorno). Puede ver los valores de las variables de entorno para su máquina usando el comando env (Unix) o set (Windows).

PHP luego crea un grupo de variables GET que se generan cuando analiza la cadena de consulta. La cadena de consulta se almacena en una variable. $ QUERY_STRING y representa la información que sigue a " ? "en la URL solicitada. PHP divide la cadena de consulta carácter por carácter & en elementos individualesy luego busca en cada uno de estos elementos el signo "\u003d". Si se encuentra el signo "\u003d", se crea una variable con el nombre de los caracteres a la izquierda del signo igual. Considere la siguiente forma:

acción \u003d "http: //localhost/PHP/test.php" método \u003d " obtener"\u003e HDD: type \u003d " texto"nombre \u003d" HDD"/>
CD ROM: type \u003d " texto"nombre \u003d" CD ROM"/>
type \u003d " enviar"/>

Si escribe, por ejemplo, "Maxtor" en la línea HDD en este formulario y "Nec" en la línea CDROM, generará el siguiente formulario de solicitud:

http: //localhost/PHP/test.php? HDD \u003d Maxtor & CDROM \u003d Nec

En nuestro caso, PHP creará las siguientes variables: $ HDD \u003d "Maxtor" y $ CDROM \u003d "Nec".

Puede trabajar con estas variables desde su script (tenemos test.php) como con variables ordinarias. En nuestro caso, simplemente se muestran en la pantalla:

eco("

HDD es $ HDD

"); eco("

CDROM es $ CDROM

"); ?>

Si se realiza una solicitud de página mediante el método POST, aparece un grupo de variables POST, que también se interpretan y colocan en una matriz. $ HTTP_POST_VARS.

Inmediatamente antes de iniciar el script, el servidor le pasa algunas variables de entorno con información. Algunas variables contienen algunos encabezados, pero no todos (no puede obtener todos los encabezados). A continuación, proporcionaré una lista de las variables de entorno más importantes.

HTTP_ACCEPT

Esta variable enumera todos Tipos de datos MIMEque puede ser percibido por el navegador. La línea * / * significa que el navegador comprende cualquier tipo.

HTTP_ACCEPT \u003d imagen / gif, imagen / x-xbitmap, imagen / jpeg, imagen / pjpeg, aplicación / x-shockwave-flash, aplicación / vnd.ms-excel, aplicación / msword, * / *

HTTP_REFERER

Esta variable representa información sobre la página desde la que el usuario llegó a la determinada. Puede usar esta variable, por ejemplo, para rastrear el movimiento de un usuario en su sitio y luego ver las rutas más populares.

HTTP_REFERER \u003d http: //www.site/php/pril/

HTTP_COOKIE

Esta variable almacena todas las cookies codificadas en URL.

HTTP_COOKIE \u003d hotlog \u003d 1; ZDEDebuggerPresent \u003d php, phtml, php3; b \u003d b; PHPSESSID \u003d

HTTP_USER_AGENT

Identifica el navegador del usuario. Para determinar el tipo de navegador, debe verificar la presencia de palabras en esta cadena: si el navegador es Internet Explorer, entonces estará presente la subcadena MSIE, y si solo hay la palabra Mozilla, entonces es Netscape.

Por ejemplo:

HTTP_USER_AGENT \u003d Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

Contiene el nombre de dominio del servidor web en el que se ejecutó el script. Esta variable es lo suficientemente conveniente para usar, por ejemplo, para generar la ruta completa, que se requiere en el encabezado Ubicación, para no vincularse a un servidor específico.

HTTP_HOST \u003d www.site

HTTP_FROM

La dirección de correo electrónico del usuario que realizó la solicitud.

NOMBRE DEL SERVIDOR

Nombre de dominio o dirección IP del servidor.

SERVER_NAME \u003d www.site

SERVER_SOFTWARE

El nombre y la versión del programa del servidor que responde a la solicitud del cliente.

PUERTO DE SERVICIO

Esta variable contiene el puerto del servidor al que accede el navegador del usuario. Normalmente es 80. La variable también se puede utilizar para formar el parámetro de encabezado de ubicación.

PUERTO_SERVIDOR \u003d 80

SERVER_PROTOCOL

La variable contiene el nombre y la versión del protocolo de información que se utilizó para la solicitud.

SERVER_PROTOCOL \u003d HTTP / 1.1

REMOTE_ADDR

Esta variable contiene la dirección IP (o nombre de dominio) del nodo del usuario en el que se inició el navegador.

PUERTO REMOTO

Un puerto que se asigna al navegador del usuario para recibir una respuesta del servidor.

REMOTE_USER

El nombre de identificación del usuario que realiza la solicitud.

SCRIPT_NAME

Contiene el nombre del archivo que contiene este script. Esta variable es conveniente de usar cuando se forma el encabezado de ubicación cuando se redirige a sí mismo (autodirección), así como para sustituir el valor del atributo de acción de la etiqueta. en la página a la que llama el script cuando se inicia sin parámetros (para no vincularse a un nombre de script específico).

RAIZ DEL DOCUMENTO

El directorio raíz del árbol de documentos web.

REQUEST_METHOD

El método que usa el usuario al transferir datos. Cabe señalar que un script bien redactado debe determinar por sí mismo, en función de esta variable, qué método utiliza el usuario y recibir datos de la fuente adecuada, y no asumir que la transferencia se llevará a cabo, por ejemplo, solo por el Método POST.

QUERY_STRING

Contiene parámetros que se especifican en la URL después del signo de interrogación. Recordemos que están disponibles tanto con el método GET como con el método POST (si en este último caso se definieron en el atributo action de la etiqueta ).

PATH_INFO

Contiene información adicional sobre la ruta.

PATH_TRANSLATED

La misma información que en la variable PATH_INFO con un prefijo que especifica la ruta al directorio raíz del árbol de documentos web.

TIPO DE CONTENIDO

Tipo de medio de datos de solicitud.

LARGANCIA DE CONTENIDO

Devuelve el número de bytes de datos enviados por el usuario. Esta variable debe analizarse si acepta y procesa un formulario POST.

GATEWAY_INTERFACE

La versión CGI que está usando el servidor.

Ejemplo de uso de variables de entorno

Variables de entorno

Variables de entorno:


"; $ br \u003d getenv (" HTTP_USER_AGENT "); if (strpos ($ br," MSIE ")! \u003d\u003d false) echo" Tienes Internet Explorer
"; else echo" Tienes Netscape u otros.
"; echo" Tu IP: ".getenv (" REMOTE_ADDR ")."
"; echo" Aquí están los parámetros en la línea del navegador: ".getenv (" QUERY_STRING ");?\u003e

Este es un breve tutorial para implementar la configuración de un servicio php, dependiendo del entorno en el que se esté ejecutando. Estaré encantado si alguien puede sugerir una solución más elegante o corregirla en detalle.

Idea principal

Ejecute servicios, microservicios y aplicaciones dependientes dentro del mismo ecosistema, configurable mediante variables de entorno.
Problema
Este artículo repite "variables de entorno" demasiadas veces.
De fábrica, php-fpm ignora las variables de entorno global (función getenv), mientras que php cli puede recibirlas.
Fondo
Puede omitir esta sección si ya ha trabajado con .env

EN este momento Estoy trabajando en un proyecto escrito en ZF2. Se utilizaron archivos de configuración para diferentes entornos para configurar el proyecto. Esto genera una gran cantidad de configuraciones duplicadas en el repositorio del proyecto, algo como esto:
  • session.global.php
  • session.local.php.dist
  • session.unittest.php.dist
  • db.global.php
  • db.local.php.dist
  • db.unittest.php.dist
Estos duplicados deben sincronizarse constantemente entre sí. Además, almacenan cierta lógica php dentro de sí mismos, lo que crea código duplicado.

Entonces, el proyecto ahora tiene en cuenta el medio ambiente, pero ...

Mientras que el desarrollo se llevó a cabo en máquinas en funcionamiento, el proyecto leyó el archivo .env y todo funcionó. Pero cuando implementé el entorno de prueba, resultó que si configuraba las variables de entorno del sistema de forma real, php-fpm las ignora. Varias recetas de Google y StackOverflow se redujeron a una u otra automatización del uso de dos métodos bien conocidos:

1. Pasar variables a través de nginx usando la prueba fastcgi_param SOMEENV;
2. Establecer variables en el formato env en la configuración del grupo de procesos de trabajo php-fpm.

Tanto la primera como la segunda opción son convenientes para algunas situaciones especiales. Pero si piensa en el paradigma de "configurar el entorno, no la aplicación", entonces tales métodos resultan mucho más difíciles que, por ejemplo, simplemente poner el archivo .env en la carpeta con el proyecto. Pero después de todo, un orquestador, un sistema de CI o simplemente administrador de sistema no tiene que conocer los detalles del proyecto, no es elegante.

Solución propuesta
Al combinar varias recetas de la web, encontré la siguiente solución de trabajo.
Probado bajo Centos 7, PHP 5.6.14.

1. Abra /etc/php.ini - Reemplace variables_order \u003d "GPCS" con variables_order \u003d "EGPCS" # Después de eso, PHP agregará variables de entorno al espacio global # http://php.net/manual/ru/ini.core .php # ini.variables-order 2. Abra /etc/php-fpm.d/www.conf, no confundir con /etc/php-fpm.conf (en diferentes sistemas puede estar en diferentes lugares, esta es la configuración del grupo de procesos www para php-fpm. - Agregue (o reemplace, si corresponde): clear_env \u003d no # deshabilitar el borrado de variables globales para los corredores 3. Configure las variables de entorno requeridas en / etc / environment (sintaxis estándar A \u003d B) 4. ln -fs / etc / environment / etc / sysconfig / php-fpm # ahora la configuración de las variables de entorno del servicio php-fpm será solo un enlace a la configuración global 5.systemctl daemon-reload && service php-fpm restart

El mismo enfoque de enlace simbólico, en teoría, también se puede aplicar a otros servicios.

Ventajas de la solución propuesta:
- Las variables almacenadas en / etc / environment están disponibles diferentes aplicaciones... Puede llamar a echo $ MYSQL_HOST en el shell o getenv ("MYSQL_HOST") en php.
- Las variables de entorno que no se establezcan explícitamente en / etc / environment no irán a php-fpm. Esto permite que el orquestador controle el entorno desde fuera del sistema de espacio aislado en el que se ejecuta el servicio.

Desventajas:
- Desafortunadamente, en php-fpm no encontré un comando que funcione para recargar por analogía con nginx, así que en caso de cambiar / etc / environment, asegúrese de hacerlo systemctl daemon-reload && service php-fpm restart.

Importante: si su aplicación no funciona en un entorno aislado (servidor, máquina virtual, contenedor), la definición de variables de entorno puede afectar de manera impredecible a los servicios vecinos en el sistema debido a coincidencias de nombres en el espacio global.