Я хочу понять, как устанавливаются и сбрасываются (переопределяются) переменные среды. Я запускаю Apache / 2.2.24 (Unix) PHP / 5.4.14 на Mac. Моя теория такова:
Переменные среды могут быть установлены в bash, затем их можно перезаписать с помощью httpd.conf, предшествующего директиве VirtualHost, которая предшествует php.ini, которая затем может быть перезаписана с помощью .htaccess (если допустимо) и, наконец, PHP
Я пробовал следующее:
установка переменной окружения в bash: я добавил export ENVIRONMENT='local'
к моему ~ / .bashrc файл, перезапустил apache и не получил никаких выходных данных print_r($_ENV);
(в простом файле index.php в корне моего веб-сервера). Я также пробовал поставить ENVIRONMENT='local'
в / etc / окружающая среда, и перезапуск apache, ничего, а также / и т.д. / bashrc, перезапустите apache. еще ничего.
установка переменной окружения в httpd.conf: я добавил SetEnv ENVIRONMENT 'local-httpd
до конца моего /etc/apache2/httpd.conf файл (но прежде чем я загружу другие файлы conf, такие как виртуальный хост [Include /private/etc/apache2/other/*.conf
]). Теперь я вижу переменную в массиве print_r($_SERVER);
но нет print_r($_ENV);
.
установка переменной окружения в httpd-vhosts.conf: я добавил SetEnv ENVIRONMENT 'local-vhost
к моему /etc/apache2/extra/httpd-vhosts.conf в моей общей директиве, указывающей на корень моего документа по умолчанию. Теперь я вижу, что переменная была перезаписана (на local-vhost из local-httpd, поэтому я знаю, где устанавливается переменная).
установка переменной окружения в php.ini: ища подходящее место для моей переменной окружения, я заметил, что variables_order = "GPCS"
был установлен на производственную стоимость, а не EGPCS
. Я изменил его, перезапустил свой сервер и обнаружил, что теперь получаю вывод для print_r($_ENV);
но не моя ожидаемая пользовательская переменная. Также похоже, что я не могу установить пользовательскую переменную в этом файле. Скажите, пожалуйста, если я ошибаюсь
установка переменной окружения в .htaccess: я добавил SetEnv ENVIRONMENT 'local-htaccess'
. Это сработало, как и ожидалось, перезаписав все остальные установленные значения.
установка / перезапись переменной среды в PHP:
if (...) { putenv('ENVIRONMENT=local'); }
Я задаю этот вопрос, потому что у меня много локальных и удаленных тестовых серверов, некоторые из которых могут или не могут разрешать мне доступ для изменения httpd, httpd-vhost, php.ini или переменных среды. Я хочу понять, что лучше всего подходит для этих разностных сценариев (общий хостинг, героку, локальные серверы и т. Д.)
Я, очевидно, не знаю, как правильно установить переменную среды в bash таким образом, чтобы php мог ее использовать, я хотел бы знать, как это сделать (поскольку я думаю, что Heroku делает что-то подобное с heroku config set...
)
обычно Apache использует пользовательские www-данные, а это значит, что вам не нужно изменять ~ / .bashrc, а /var/www/.bashrc.
Так как:
$ ~www-data
-bash: /var/www: Is a directory