Intereting Posts
Вставка, обновление, удаление -> Нормализация и заголовок кода PHP shell_exec () не выполнит команду экрана для запуска .jar-файла Mysql_fetch_object () SQL Query (КАК: Если результатов не найдено, отобразите «сообщение»)? Как запустить сценарий оболочки как другой пользователь с PHP на Nginx? Добавить новую строку в MYSQL из Comma Разделяемый текст в текстовом поле ZF2: Получить параметры url в контроллере Вставка нескольких строк сразу с помощью подготовленных операторов Вложение PHP mail () повреждено Преобразование URL-адресов из текста в ссылки, даже если протокол отсутствует Проблемы с PHPMailer Как использовать API Google SpreadSheets для подачи данных в приложение? Сценарий PhantomJS, возвращающий пустую веб-страницу как отправлять электронную почту с localhost с помощью codeigniter? Загрузка и сохранение файла с помощью wget в shell_exec Как получить идентификатор пользователя и поместить его в таблицу

Как получить переменные системной среды в PHP при запуске CLI и Apache2Handler?

Моя система Ubuntu, и я установил переменные среды в /etc/environment .

Если я использую PHP- скрипт с использованием CLI – распознаются переменные среды из /etc/environment .

Но, если я иду на выполнение PHP- скрипта через http://domain/test.php (то есть apache2handler ), то точно такой же скрипт выдает NULL, то есть переменные среды из /etc/environment не загружаются.

Исправление, которое я делал, заключалось в добавлении переменных в /etc/apache2/envvars и это решило проблему.

Но это два разных файла, которые затем нужно синхронизировать.

Как я могу сделать загрузку PHP / Apache и распознавать переменные среды из /etc/environment (system)?

EDIT: Чтобы прояснить ситуацию, когда я говорю «не загружен в PHP», это означает, что переменные из /etc/environment не установлены в $_SERVER , $_ENV , getenv() и не существуют в $GLOBALS . Другими словами, «не загружаются в PHP».

У меня была точно такая же проблема. Чтобы решить эту проблему, я просто получил /etc/environment внутри /etc/apache2/envvars .

Содержимое /etc/environment :

 export MY_PROJECT_PATH=/var/www/my-project export MY_PROJECT_ENV=production export MY_PROJECT_MAIL=support@my-project.com 

Содержимое /etc/apache2/envvars :

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

Теперь я могу использовать эти переменные в конфигурационных файлах Apache Virtual Host и в PHP.

Вот пример виртуального хоста 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> 

И это пример того, как обращаться к ним с 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"; ?> 

На ubuntu PHP использует разные ini-файлы для регулярных и CLI-процессов.

Там должно быть мало файлов ini, таких как /etc/php5/cli/php.ini , /etc/php5/fpm/php.ini или /etc/php5/php.ini . Откройте соответствующий INI-файл и измените

variables_order = "GPCS"

линии до

variables_order = "EGPCS" .

После этого вы получите переменные среды, которые вы задали, перед использованием $ _ENV ['varname'].

Из php.ini about 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. 

Таким образом, вы можете попытаться использовать getenv () вместо $ _ENV [].

Недавно я написал библиотеку, чтобы получить значения из переменных среды и проанализировать типы данных PHP. Эта библиотека может использоваться для синтаксического анализа переменных среды для типов данных PHP (например, для каста целых чисел, float, null, boolean), синтаксического анализа сложных структур данных, таких как строка JSON, и многое другое с вкладом commnunity.

Библиотека доступна здесь: https://github.com/jpcercal/environment

Поместите переменные среды в «/ etc / environment» и «/ etc / apache2 / envvars», после перезапуска сервера Apache и загрузите переменные среды в операционную систему:

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

И чтобы получить значения из переменной среды (независимо от CLI среды, Apache, Nginx, встроенного сервера PHP и т. Д.), Выполните следующие действия:

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

Наслаждайся этим.

я думаю, вы можете использовать только для установки переменной среды из .htaccess:

 SetEnv mohammad hello 

PHP:

 print $_SERVER["mohammad"];