Как установить глобальные переменные среды для PHP
Я прочитал вопрос/ответы здесь, но я не понимаю, как устанавливать переменные в /etc/environment. Если я отредактирую файл, мне нужно перезагрузить машину или просто выйти из текущего пользователя (или войти в новый?).
Я хочу установить глобальную переменную для обозначения того, что веб-сайты на моей машине находятся в режиме разработки или тестирования. Я не хочу устанавливать это для каждого проекта (использует ли он PHP, Java/Tomcat, NodeJS и т.д.). Я знаю, что (для Apache) я могу установить переменную окружения следующими способами:
- напрямую с php с
putenv()
(это кажется бесполезным, поскольку я хочу избежать логики, которая пытается выяснить, на каком сервере находятся файлы)
- с использованием .htaccess
SetEnv ENVIRONMENT 'local'
(это потребовало бы, чтобы я дублировал этот файл/код для каждого сервера, а не идеально)
- с помощью директивы Virtual Host
SetEnv ENVIRONMENT 'local'
(если я использую виртуальный хост, который почти во всех случаях я есть, но снова требует, чтобы я копировал/вставлял код снова и снова)
- в httpd-conf
SetEnv ENVIRONMENT 'local'
(это применимо только к apache, и я хотел бы, чтобы он также обращался к серверам NodeJS)
Я не говорю, что я не могу сделать # 4 (и применять # 3 выборочно к серверам NodeJS). Но я думаю, что это хорошая причина для использования /etc/environment. Как я уже говорил выше, я редактировал файл (после его первого создания) и пробовал следующие комбинации: ни один из них не работал:
ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local
Я говорю, что никто из них не работал, потому что я не нашел переменную на выходе из:
print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
Ответы
Ответ 1
Что вы хотите сделать, это использовать файл конфигурации Apache. Вам понадобится доступ к папке конфигурации и файлу httpd.conf(или измененной версии). Затем вы можете настроить httpd.conf для динамической загрузки файлов конфигурации с использованием этого подхода.
Include conf.d/*.conf
В папке conf.d вы размещаете файлы конфигурации вашей конкретной среды.
Пример server-environment-dev.conf:
SetEnv ENVIRONMENT "local"
Пример server-environment-prod.conf:
SetEnv ENVIRONMENT "production"
Эти настройки будут отображаться в вашем php-коде как доступные переменные среды. Этот подход позволяет вам сохранять ваши файлы vhost,.htaccess и другие конфигурационные файлы в среде.
etc/environment, etc/profile.d,.bash_profile,.profile и т.д. файлы не читаются PHP в Apache из-за некоторых ограничений процесса/пользователя. Вы можете bash, разбить, свернуть все переменные и посмотреть, что они установлены в вашем терминале, но они не будут отображаться в phpinfo(), если вы не установите его через один из файлов конфигурации Apache.
Для NodeJS вы можете запустить приложение в переменной окружения, или вы можете установить NODE_ENV несколькими способами, включая ваш .bash_profile и, возможно, файл etc/environment, если вы хотите быть агностиком пользователя.
Хорошо прочитано для Node:
http://www.hacksparrow.com/running-express-js-in-production-mode.html
Ответ 2
Итак, я бы предположил, что у вас есть файл глобальной конфигурации. Почему бы не поместить константу в этот файл, который вы можете изменить? Было бы намного проще попытаться установить что-то на уровне сервера.
define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
echo 'We\'re just testing';
}
Ответ 3
Если вы все еще не можете получить переменные среды:
вам может потребоваться отредактировать реальный httpd.conf
~/Library/Поддержка приложений /appsolute/MAMP PRO/
вместо
/Applications/MAMP/CONF/Apache/
Также вам может понадобиться getenv() вместо $_ ENV