通过虚拟主机配置设置Application_ENV并在PHP中读取

时间:2010-03-04 11:32:23

标签: php apache zend-framework configuration

我喜欢它在Zend Framework中的工作原理。我可以通过检查控制器中的APPLICATION_ENV常数来了解我当前使用的环境。

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

但不幸的是我不能在我当前的项目中使用ZF。如何在PHP代码中检查此环境变量?

4 个答案:

答案 0 :(得分:44)

由于SetEnv设置了Apache环境的值,您可以使用

获取它

或只是

  • getenv - 获取环境变量的值

如果您在ZF项目中查看public/index.php,您会看到ZF使用getenv

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

经常使用的替代方法是从PHP读取Hostname并相应地定义常量:

if(!defined('APPLICATION_ENV')) {
    if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
        define(APPLICATION_ENV, 'development');
    } else {
        define(APPLICATION_ENV, 'production');
    }
}

这样,您根本不必依赖环境设置。

答案 1 :(得分:11)

SetEnv定义了一个环境变量。

设置(在Apache的配置或系统级别)之后,您可以使用getenv函数读取其值:

echo getenv('APPLICATION_ENV');


例如,如果您在.htaccess文件中使用此内容:

SetEnv TEST glop

您可以使用这部分PHP代码:

var_dump(getenv('TEST'));

你会得到:

string 'glop' (length=4)

答案 2 :(得分:0)

我有同样的问题然后我解决了它。解决问题的方法是在apache init脚本中声明所有变量。

我在centos上使用apache,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

这解决了我的问题。我希望这有帮助。

答案 3 :(得分:0)

您也可以从$_SERVER变量访问它。