Подтвердить что ты не робот

Как установить глобальные переменные среды для 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'));
4b9b3361

Ответ 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