Как установить глобальные переменные среды для PHP

Я прочитал здесь вопрос / ответы, но я не понимаю, как устанавливать переменные в / etc / environment . Если я отредактирую файл, мне нужно перезагрузить машину или просто выйти из текущего пользователя (или войти в новый?).

Я хочу установить глобальную переменную, чтобы обозначить, что веб-сайты на моей машине находятся в режиме «разработки» или «тестирования». Я не хочу устанавливать это для каждого проекта (использует ли он PHP, Java / Tomcat, NodeJS и т. Д.). Я знаю, что (для Apache) я могу установить переменную среды следующими способами:

  1. прямо из php с putenv() (это кажется бесполезным, поскольку я хочу избежать логики, которая пытается выяснить, на каком сервере находятся файлы)
  2. используя .htaccess SetEnv ENVIRONMENT 'local' (это потребовало бы, чтобы я дублировал этот файл / код для каждого сервера, а не идеально)
  3. используя директиву виртуального хоста SetEnv ENVIRONMENT 'local' (если я использую виртуальный хост, который почти во всех случаях я есть, но снова требует, чтобы я копировал / вставлял код снова и снова)
  4. в 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')); 

То, что вы хотите сделать, это использовать файл конфигурации 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