Я прочитал здесь вопрос / ответы, но я не понимаю, как устанавливать переменные в / 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