If your $_ENV array is mysteriously empty, but you still see the variables when calling getenv() or in your phpinfo(), check your http://us.php.net/manual/en/ini.core.php#ini.variables-order ini setting to ensure it includes "E" in the string.
(PHP 4 >= 4.1.0, PHP 5)
$_ENV -- $HTTP_ENV_VARS [застаріла] — Змінні оточення
Асоціативний масив (array) змінних, переданих до поточного скрипта через метод оточення.
Ці змінні імпортуються в глобальний простір імен PHP з оточення, в якому запущено PHP-парсер. Більшість передається через оболонку, під якою PHP запущено, причому різні системи, швидше за все, мають різні оболонки, а тому їх повний список відсутній. Вам необхідно ознайомитись з документацією вашої оболонки, щоб отримати список визначених змінних оточення.
Інші змінні оточення, включаючи змінні CGI, там знаходяться незалежно від способу запуску PHP: як модуля сервера, чи як CGI-процесора.
Змінна $HTTP_ENV_VARS містить таку ж ініціалізуючу інформацію, але не є суперглобальною. (Зауважте, що $HTTP_ENV_VARS та $_ENV є різними змінними, а тому PHP обробляє їх як такі)
Версія | Опис |
---|---|
4.1.0 | Введено $_ENV для заміни застарілої $HTTP_ENV_VARS. |
Приклад #1 Використання $_ENV
<?php
echo "Моє ім'я користувача: " .$_ENV["USER"] . "!";
?>
Припустимо запустив цей скрипт "bjori"
Наведений вище приклад виведе щось подібне до:
Моє ім'я користувача: bjori!
Зауваження:
Це є "суперглобальна", або автоматична глобальна змінна. Тобто ця змінна доступна у всіх областях видимості скрипта, та її не потрібно оголошувати як global $variable; щоб отримати доступ до неї всередині функції чи метода.
If your $_ENV array is mysteriously empty, but you still see the variables when calling getenv() or in your phpinfo(), check your http://us.php.net/manual/en/ini.core.php#ini.variables-order ini setting to ensure it includes "E" in the string.
Comments for this page seem to indicate getenv() returns environment variables in all cases.
For getenv() to work, php.ini variables_order must contain 'E'.
Please note that writing to $_ENV does not actually set an environment variable, i.e. the variable will not propagate to any child processes you launch (except forked script processes, in which case it's just a variable in the script's memory). To set real environment variables, you must use putenv().
Basically, setting a variable in $_ENV does not have any meaning besides setting or overriding a script-wide global variable. Thus, one should never modify $_ENV except for testing purposes (and then be careful to use putenv() too, if appropriate).
PHP will not trigger any kind of error or notice when writing to $_ENV.
If $_ENV is empty because variables_order does not include it, it will be filled with values fetched by getenv().
For example, when calling getenv("REMOTE_ADDR"), $_ENV['REMOTE_ADDR'] will be defined as well (if such an environment variable exists).
If you wish to define an environment variable in your Apache vhost file, use the directive SetEnv.
SetEnv varname "variable value"
It is important to note that this new variable will appear in $_SERVER, not $_ENV.
If you're using php-fpm you might want to set `clean_env = no`. This setting cleans the environment variables by default, meaning that PHP would be started with a clean environment.
If running php-fpm with the default production variables_order = GPCS, $_ENV will always be an empty array. Instead of reading the superglobal $_ENV use the built-in function getenv() or read from $_SERVER['ENV-KEY-HERE'].
@Tit Petric - I believe you meant: clear_env=no
not clean_env
Set the above in your PHP-FPM config to prevent clearing ENV vars
When running a PHP program under the command line, the $_SERVER["SERVER_NAME"] variable does not contain the hostname. However, the following works for me under Unix/Linux and Windows:
<?php
if (isset($_ENV["HOSTNAME"]))
$MachineName = $_ENV["HOSTNAME"];
else if (isset($_ENV["COMPUTERNAME"]))
$MachineName = $_ENV["COMPUTERNAME"];
else $MachineName = "";
?>