Установите Application_ENV через конфигурацию виртуального хоста и прочитайте это в PHP

Мне нравится, как это работает в Zend Framework. Я могу узнать, какую среду я использую, проверяя в контроллере постоянную константу APPLICATION_ENV.

<VirtualHost *:80> #ServerName #DocumentRoot SetEnv APPLICATION_ENV "development" # Directory </VirtualHost> 

Но, к сожалению, я не могу использовать ZF в своем текущем проекте. Как проверить эту переменную среды в моем PHP-коде?

Поскольку SetEnv устанавливает значение для окружения Apache, вы можете получить его с помощью

  • apache_getenv – получить переменную subprocess_env Apache

или просто

  • getenv – Возвращает значение переменной среды

Если вы посмотрите на public/index.php в проекте ZF, вы увидите, что ZF использует getenv :

 // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

Часто использовать альтернативу было бы прочитать Hostname из 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, а скрипт init находится в /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 .