variable remote_host http_referer getenv entorno php apache environment-variables

remote_host - ¿Cómo obtener variables de entorno del sistema en PHP al ejecutar CLI y Apache2Handler?



php.env file (4)

Mi sistema es Ubuntu y he configurado mis variables de entorno en /etc/environment .

Si estoy ejecutando script PHP usando CLI , se reconocen las variables de entorno de /etc/environment .

Pero, si voy a ejecutar el script PHP a través de http://domain/test.php (que es apache2handler ), exactamente el mismo script imprime NULL, lo que significa que las variables de entorno de /etc/environment no se cargan.

La solución que hice fue agregar variables en /etc/apache2/envvars y eso resolvió el problema.

Pero eso son dos archivos diferentes, que luego deben mantenerse sincronizados.

¿Cómo puedo hacer que PHP / Apache cargue y reconocer las variables de entorno de /etc/environment (system)?

EDITAR: Para aclarar las cosas, cuando digo ''no cargado en PHP'' significa que las variables de /etc/environment no están establecidas en $_SERVER , $_ENV , getenv() y no existen en $GLOBALS . En otras palabras, ''no están cargados en PHP''.


Creo que solo puedes usar para establecer una variable de entorno desde .htaccess:

SetEnv mohammad hello

PHP:

print $_SERVER["mohammad"];


En ubuntu, PHP usa diferentes archivos ini para procesos regulares y de CLI.

Debe haber pocos archivos ini como /etc/php5/cli/php.ini , /etc/php5/fpm/php.ini o /etc/php5/php.ini . Abra el archivo INI relacionado y cambie el

variables_order = "GPCS"

línea a

variables_order = "EGPCS" .

Después de eso, obtendría las variables de entorno que configuró antes de usar $ _ENV [''varname''].

Desde php.ini sobre variables_order :

Abbreviations for the following respective super globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty paid for the registration of these arrays and because ENV is not as commonly used as the others, ENV is is not recommended on productions servers. You can still get access to the environment variables through getenv() should you need to.

Entonces puede intentar usar getenv() lugar de $ _ENV [].


Recientemente escribí una biblioteca para obtener valores de las variables de entorno y analizar los tipos de datos de PHP. Esta biblioteca se puede utilizar para analizar variables de entorno a tipos de datos de PHP (como la conversión a entero, flotante, nulo, booleano), analizar las complejas estructuras de datos como una cadena JSON y más con la contribución de la comunidad.

La biblioteca está disponible aquí: https://github.com/jpcercal/environment

Coloque sus variables de entorno en "/ etc / environment" y "/ etc / apache2 / envvars", después de reiniciar su Servidor Apache y cargar sus variables de entorno al sistema operativo:

# source /etc/environment # source /etc/apache2/envvars

Y para obtener los valores de la variable de entorno (independientemente del entorno CLI, Apache, Nginx, PHP Built-in Server y más) para hacerlo:

<?php // ... require "vendor/autoload.php"; // ... var_dump(Cekurte/Environment/Environment::get("YOUR_ENV_VARIABLE_NAME"));

Disfrútala.


Tuve exactamente el mismo problema. Para resolverlo, acabo de obtener /etc/environment dentro de /etc/apache2/envvars .

El contenido de /etc/environment :

export MY_PROJECT_PATH=/var/www/my-project export MY_PROJECT_ENV=production export [email protected]

El contenido de /etc/apache2/envvars :

# Load all the system environment variables. . /etc/environment

Ahora, puedo usar estas variables en los archivos de configuración de Apache Virtual Host y en PHP.

Aquí hay un ejemplo de un host virtual Apache:

<VirtualHost *:80> ServerName my-project.com ServerAlias www.my-project.com ServerAdmin ${MY_PROJECT_MAIL} UseCanonicalName On DocumentRoot ${MY_PROJECT_PATH}/www # Error log. ErrorLog ${APACHE_LOG_DIR}/my-project.com_error.log LogLevel warn # Access log. <IfModule log_config_module> LogFormat "%h %l %u %t /"%m %>U%q/" %>s %b %D" clean_url_log_format CustomLog ${APACHE_LOG_DIR}/my-project.com_access.log clean_url_log_format </IfModule> # DocumentRoot directory <Directory ${MY_PROJECT_PATH}/www> # Disable .htaccess rules completely, for better performance. AllowOverride None Options FollowSymLinks Includes Order deny,allow Allow from All Include ${MY_PROJECT_PATH}/config/apache/inc.mime-types.conf Include ${MY_PROJECT_PATH}/config/apache/inc.cache-control.conf # Rewrite rules. <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / # Include all the common rewrite rules (for http and https). Include ${MY_PROJECT_PATH}/config/apache/inc.rewriterules-shared.conf </IfModule> </Directory> </VirtualHost>

Y este es un ejemplo de cómo acceder a ellos con PHP:

<?php header(''Content-Type: text/plain; charset=utf-8''); print getenv(''MY_PROJECT_PATH'') . "/n" . getenv(''MY_PROJECT_ENV'') . "/n" . getenv(''MY_PROJECT_MAIL'') . "/n"; ?>