SetEnv APPLICATION_ENV开发 – .htaccess与Zend Framework交互

我有我的htaccess以下。

SetEnv APPLICATION_ENV development 

当我把这个文件传给生产者时,我将把它改为:

 SetEnv APPLICATION_ENV production 

这个

发展

生产

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

Zend和Apache在这里如何沟通? Zend如何知道这个htaccess指令?

谢谢。

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

从PHP,你可以阅读环境变量:

  • 使用getenv()函数。
  • 或者在$_SERVER$_ENV超全局变量中

看一下Zend框架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' ); 

沟通的流程就像下面这样:

如果你使用

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中提供的值。 如果我是你,我仍然保持同步。 因为你可能会犯一些错误,比如忘记为你的虚拟主机设置AllowOverride,这会导致这样一种情况:即使存在.htaccess,index.php也会设置环境。