Установите Application_ENV через конфигурацию виртуального хоста и прочитайте это на PHP - PullRequest
48 голосов
/ 04 марта 2010

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

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

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

Ответы [ 4 ]

46 голосов
/ 04 марта 2010

Поскольку SetEnv устанавливает значение для среды 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');
    }
}

Таким образом, вам вообще не нужно полагаться на настройки среды.

11 голосов
/ 04 марта 2010

SetEnv определяет переменную среды.

После установки (либо в конфигурации вашего Apache, либо на уровне системы) вы можете прочитать его значение, используя функцию getenv:

echo getenv('APPLICATION_ENV');


Например, если вы используете это в своем файле .htaccess:

SetEnv TEST glop

Вы можете использовать эту часть кода PHP:

var_dump(getenv('TEST'));

И вы получите:

string 'glop' (length=4)
0 голосов
/ 14 января 2016

вы также можете получить к нему доступ из переменной $_SERVER.

0 голосов
/ 14 ноября 2015

У меня была такая же проблема, тогда я решил ее.Чтобы решить эту проблему, нужно объявить все переменные в скрипте apache init.

Я использую 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

Это решило мою проблему.Надеюсь, это поможет.

...