Установите ENV приложения через конфигурацию виртуального хоста и прочитайте это на PHP
Мне нравится, как это работает в Zend Framework. Я могу узнать, какую среду я в настоящее время использую, проверив константу APPLICATION_ENV в своем контроллере.
<VirtualHost *:80>
#ServerName
#DocumentRoot
SetEnv APPLICATION_ENV "development"
# Directory
</VirtualHost>
Но, к сожалению, я не могу использовать ZF в своем текущем проекте. Как я могу проверить эту переменную среды в своем PHP-коде?
4 answers
Поскольку SETENV set - это значение для среды Apache, вы можете получить его с помощью
-
apache_getenv
- Получить переменную Apache subprocess_env
Или просто
-
getenv
- Возвращает значение переменной среды
Если вы посмотрите на public/index.php
в проекте ZF, вы увидите, что ZF использует getenv
:
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') :
'production'));
Часто используемой альтернативой было бы прочитать имя хоста из PHP и определить константу соответственно:
if(!defined('APPLICATION_ENV')) {
if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
define(APPLICATION_ENV, 'development');
} else {
define(APPLICATION_ENV, 'production');
}
}
Таким образом, вам вообще не нужно полагаться на настройки среды.
SetEnv
определяет переменную среды.
Как только это значение будет установлено (либо в конфигурации вашего Apache, либо на системном уровне), вы можете прочитать его значение с помощью getenv
функция:
echo getenv('APPLICATION_ENV');
Например, если вы используете это в своем файле .htaccess
:
SetEnv TEST glop
Вы можете использовать эту часть кода PHP:
var_dump(getenv('TEST'));
И вы получите:
string 'glop' (length=4)
У меня была такая же проблема, а потом я ее решил. Способ решения проблемы - объявить все переменные в сценарии инициализации apache.
Я использую apache на centos, и сценарий инициализации находится в /etc/init.d/httpd
Добавьте этот код, но измените его в соответствии с вашим конкретным случаем.
ORACLE_HOSTNAME=ora11g.home.com; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=ora11g; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
Это решило мою проблему. Я надеюсь, что это поможет.
Вы также можете получить к нему доступ из переменной $_SERVER
.