Я прочитал здесь вопрос / ответы, но я не понимаю, как устанавливать переменные в / etc / environment . Если я отредактирую файл, мне нужно перезагрузить машину или просто выйти из текущего пользователя (или войти в новый?).
Я хочу установить глобальную переменную, чтобы обозначить, что веб-сайты на моей машине находятся в режиме «разработки» или «тестирования». Я не хочу устанавливать это для каждого проекта (использует ли он PHP, Java / Tomcat, NodeJS и т. Д.). Я знаю, что (для Apache) я могу установить переменную среды следующими способами:
putenv()
(это кажется бесполезным, поскольку я хочу избежать логики, которая пытается выяснить, на каком сервере находятся файлы) SetEnv ENVIRONMENT 'local'
(это потребовало бы, чтобы я дублировал этот файл / код для каждого сервера, а не идеально) SetEnv ENVIRONMENT 'local'
(если я использую виртуальный хост, который почти во всех случаях я есть, но снова требует, чтобы я копировал / вставлял код снова и снова) 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'));
То, что вы хотите сделать, это использовать файл конфигурации 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 из-за некоторых ограничений процесса / пользователя. Вы можете разбивать, разбивать, разбивать переменные все, что хотите, и видеть их в своем терминале, но они не будут отображаться в phpinfo (), если вы не установите его через один из файлов конфигурации Apache.
Для NodeJS вы можете запустить приложение, проходящее в вашей переменной окружения, или вы можете установить NODE_ENV несколькими способами, включая ваш .bash_profile и, возможно, файл etc / environment, если вы хотите быть агностиком пользователя.
Хорошее чтение для узла: http://www.hacksparrow.com/running-express-js-in-production-mode.html
Поэтому я бы предположил, что у вас есть глобальный файл конфигурации. Почему бы не поместить константу в этот файл, который вы можете изменить? Было бы намного проще попытаться установить что-то на уровне сервера.
define('ENVIRONMENT', 'testing'); if(ENVIRONMENT == 'testing') { echo 'We\'re just testing'; }
Если вы все еще не можете получить переменные среды:
вам может потребоваться изменить ваш настоящий httpd.conf в
~ / Библиотека / Поддержка приложений / appsolute / MAMP PRO /
вместо
/ Applications / MAMP / CONF / апач /
Также вам может понадобиться использовать getenv () вместо $ _ENV