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

Nik*_*hev 49 php apache configuration zend-framework

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

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*don 47

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

要不就

  • getenv - 获取环境变量的值

如果你看一下public/index.phpZF项目,你会看到ZF使用getenv:

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? 
                                  getenv('APPLICATION_ENV') : 
                                  'production'));
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 对于仍在阅读此答案的人来说,有一点需要注意:使用替代方法仅适用于通过url,命令行脚本(例如cron)执行的脚本,不知道$ _SERVER ['SERVER_NAME']是什么,因此默认为'生产'.使用vhosts设置确定. (3认同)

Pas*_*TIN 11

SetEnv 定义一个环境变量.

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

echo getenv('APPLICATION_ENV');
Run Code Online (Sandbox Code Playgroud)


例如,如果您在.htaccess文件中使用它:

SetEnv TEST glop
Run Code Online (Sandbox Code Playgroud)

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

var_dump(getenv('TEST'));
Run Code Online (Sandbox Code Playgroud)

你会得到:

string 'glop' (length=4)
Run Code Online (Sandbox Code Playgroud)