Назад | Перейти на главную страницу

порядок операций для переменных среды

Я хочу понять, как устанавливаются и сбрасываются (переопределяются) переменные среды. Я запускаю Apache / 2.2.24 (Unix) PHP / 5.4.14 на Mac. Моя теория такова:

Переменные среды могут быть установлены в bash, затем их можно перезаписать с помощью httpd.conf, предшествующего директиве VirtualHost, которая предшествует php.ini, которая затем может быть перезаписана с помощью .htaccess (если допустимо) и, наконец, PHP

Я пробовал следующее:

  1. установка переменной окружения в bash: я добавил export ENVIRONMENT='local' к моему ~ / .bashrc файл, перезапустил apache и не получил никаких выходных данных print_r($_ENV); (в простом файле index.php в корне моего веб-сервера). Я также пробовал поставить ENVIRONMENT='local' в / etc / окружающая среда, и перезапуск apache, ничего, а также / и т.д. / bashrc, перезапустите apache. еще ничего.

  2. установка переменной окружения в httpd.conf: я добавил SetEnv ENVIRONMENT 'local-httpd до конца моего /etc/apache2/httpd.conf файл (но прежде чем я загружу другие файлы conf, такие как виртуальный хост [Include /private/etc/apache2/other/*.conf]). Теперь я вижу переменную в массиве print_r($_SERVER); но нет print_r($_ENV);.

  3. установка переменной окружения в httpd-vhosts.conf: я добавил SetEnv ENVIRONMENT 'local-vhost к моему /etc/apache2/extra/httpd-vhosts.conf в моей общей директиве, указывающей на корень моего документа по умолчанию. Теперь я вижу, что переменная была перезаписана (на local-vhost из local-httpd, поэтому я знаю, где устанавливается переменная).

  4. установка переменной окружения в php.ini: ища подходящее место для моей переменной окружения, я заметил, что variables_order = "GPCS" был установлен на производственную стоимость, а не EGPCS. Я изменил его, перезапустил свой сервер и обнаружил, что теперь получаю вывод для print_r($_ENV); но не моя ожидаемая пользовательская переменная. Также похоже, что я не могу установить пользовательскую переменную в этом файле. Скажите, пожалуйста, если я ошибаюсь

  5. установка переменной окружения в .htaccess: я добавил SetEnv ENVIRONMENT 'local-htaccess'. Это сработало, как и ожидалось, перезаписав все остальные установленные значения.

  6. установка / перезапись переменной среды в PHP:

    if (...) {
     putenv('ENVIRONMENT=local');
    }

Я задаю этот вопрос, потому что у меня много локальных и удаленных тестовых серверов, некоторые из которых могут или не могут разрешать мне доступ для изменения httpd, httpd-vhost, php.ini или переменных среды. Я хочу понять, что лучше всего подходит для этих разностных сценариев (общий хостинг, героку, локальные серверы и т. Д.)

Я, очевидно, не знаю, как правильно установить переменную среды в bash таким образом, чтобы php мог ее использовать, я хотел бы знать, как это сделать (поскольку я думаю, что Heroku делает что-то подобное с heroku config set...)

обычно Apache использует пользовательские www-данные, а это значит, что вам не нужно изменять ~ / .bashrc, а /var/www/.bashrc.

Так как:


$ ~www-data
-bash: /var/www: Is a directory