2011-03-27 66 views
24

我在我的htaccess上有以下內容。SetEnv APPLICATION_ENV開發 - .htaccess與Zend Framework交互?

SetEnv APPLICATION_ENV development 

當我通過這個文件,以脾淋巴細胞,我將其更改爲:

SetEnv APPLICATION_ENV production 

發展

生產

被設置在Zend框架的application.ini是否正確?

Zend和Apache在這裏如何溝通? Zend如何知道這個htaccess指令?

謝謝。

+0

不錯的主意,那!之前從未見過。 – 2011-03-27 11:35:49

+0

噢,信用轉到我正在閱讀的書籍作者。 :) W.J. Gilmore。但這個「如何」被省略了。 :) – MEM 2011-03-27 11:42:36

回答

39

SetEnv,用於Apache的配置(無論是.htaccess文件還是VirtualHost),定義了一個環境變量。使用getenv()功能

  • 從PHP,你可以閱讀環境變量要麼。

  • 或在$_SERVER$_ENV超全局變量


縱觀在給定index.phpZend Frameworks QuickStart,你會看到它使用環境變量的定義名爲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' 
); 
+3

'APPLICATION_ENV'用於加載配置文件*(或PHP代碼的某個部分)的正確部分* - 在其中啓用*(或不)*顯示錯誤。 – 2011-03-27 11:47:58

+0

非常感謝。 :)乾杯。 – MEM 2011-03-27 11:48:01

9

溝通的流程,你怎麼稱呼它,是followoing:

如果使用

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設置環境的情況。

+0

我會考慮這一點,但這並不容易。我正試圖使用​​capistrano自動化這個過程。此刻,我在那裏創建了一個任務,它將通過位於「生產」文件夾中的htaccessB替換htaccessA。 htaccess文件不能像我們的index.php文件那樣頻繁更改,所以我可以依靠這個... – MEM 2011-03-27 12:02:49

+1

一般來說,我覺得在.htaccess中定義環境是一個好主意,只要確保默認環境在index.php是最安全的(這將是生產),以防在使用.htaccess時出現問題。也許你也可以用應用程序拋出錯誤的方式重寫index.php,如果環境尚未由.htaccess設置的話。 – markus 2011-03-27 12:06:19