SetEnv APPLICATION_ENV开发 - .htaccess与Zend Framework交互?

时间:2011-03-27 11:31:44

标签: apache zend-framework

我的htaccess上有以下内容。

SetEnv APPLICATION_ENV development

当我将此文件传递给prodution时,我会将其更改为:

SetEnv APPLICATION_ENV production

这个

  

发展

  

生产

在Zend Framework application.ini 上设置正确吗?

Zend和Apache如何在这里交流? Zend如何知道htaccess指令?

感谢。

2 个答案:

答案 0 :(得分:39)

SetEnv ,在Apache的配置中使用(无论是.htaccess文件还是VirtualHost),定义了一个环境变量。

从PHP中,您可以读取环境变量:


看一下Zend Frameworks QuickStart中给定的index.php,您将看到它使用该环境变量来定义名为APPLICATION_ENV的PHP常量:

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

该常量稍后用于初始化应用程序:

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

答案 1 :(得分:9)

正如你所说的那样,沟通的流程是下一步:

如果您使用

  

SetEnv APPLICATION_ENV制作

在您的.htaccess中,将使用您在此处设置的环境。为什么呢?

如果在.htaccess中使用SetEnv,则index.php中的以下代码不会定义常量,如果已经定义了常量,则会出现这种情况。

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

如果.htaccess未定义常量,则将使用index.php中提供的值。如果我是你,我仍会保持同步。因为你可能会犯错,比如忘记为你的vhost设置AllowOverride,这会导致index.php设置环境的情况,即使.htaccess存在。