2008-09-28 40 views
18

我想在每個虛擬主機的基礎上自動更改數據庫連接設置,這樣我就不必編輯任何PHP代碼,因爲它從分段遷移到活動並訪問不同的數據庫。這是在一個專用的服務器上。在httpd.conf中設置PHP變量?

所以我想知道,我可以在httpd.conf中設置一個PHP變量或常量作爲虛擬主機定義的一部分,然後網站可以使用它自動將它自己指向測試數據庫?

$database = 'live'; 
if (some staging environment variable is true) { 
    $database = 'testing'; // and not live 
} 

如果這是不可能的,我想在這種情況下我可以放心地考察我跑在告訴主機名,但我喜歡的東西少一些脆弱

希望這感

千恩萬謝

伊恩

+0

這不是一個好主意。至少,恕我直言。使用你的VC,做一個標籤並進行必要的修改並完成它。它會比某種服務器端配置更清潔。 – Till 2008-09-29 01:38:52

+2

我們每週做二十次發佈,直到...爲什麼你建議一個好主意? – Polsonby 2008-10-09 07:26:58

+0

考慮到在Apache外運行的shell腳本也需要知道它們的環境。 – 2014-08-08 16:41:24

回答

70

是的...你可以這樣做:

SetEnv DATABASE_NAME testing 

,然後在PHP中:

$database = $_SERVER["DATABASE_NAME"]; 

$database = getenv("DATABASE_NAME"); 
+1

據我所知應該是$ _SERVER ['DATABASE_NAME']而不是$ _ENV。 測試它在這裏上的PHP 5.2 debian和變量沒有插入$ _ENV,但在$ _SERVER – ChrisR 2010-01-06 07:42:02

14

您可以設置環境變量與PHP檢索。

在httpd.conf:

SetEnv database testing 

在你的PHP:

if (getenv('database') == 'testing') { 

​​
3

我不會設置環境變量,因爲這在默認腳本輸出li中也是可見的ke PhpInfo();

只需用php_value在你的.htaccess略高於htdocs文件夾,即可大功告成,安全:)

2

與.htaccess中的問題是,它是代碼庫樹的一部分。代碼基樹是VC/SVN的一部分。因此,本地/ dev的任何更改都會轉移到生產環境中。保持httpd.conf中的env變量設置可以節省您不小心覆蓋服務器vs dev標誌的注意事項。除非你想使用IP地址或主機名,這兩種都不是可擴展的方法。

0

我也在尋找這種類型的解決方案。我發現的是,在Apache下你可以使用http.conf中的SetEnv KeyName DataValue,在IIS中你可以使用Fast CGI Settings >> Edit ... >> Environment Variables >> ...並且加KeyName, DataValue

這反過來允許將PHP $var = $_SERVER["KeyName"];設置爲DataValue,並根據需要在IIS和Apache中一致地使用。

我知道這是一個奇怪的用例。我在工作中使用WAMP,在家裏使用MAMP,因此能夠以相同的方式工作是很好的。