2010-01-05 220 views
12

在上下文中闡明的主要問題只是把在用getenv()在PHP和SETENV中的.htaccess與編譯PHP,CGI:如何在共享主機

在我的機器,PHP5.3.1是作爲模塊安裝在Apache上,我在我的應用程序的根.htaccess文件中使用SetEnv APPLICATION_ENVIRONMENT開發。然後可以通過getenv('APPLICATION_ENVIRONMENT')從任何php腳本中輕鬆檢索。

在生產服務器上,在共享主機(dreamhost)上,我編譯自己php5.3.1,因爲它不直接受支持。一切正常,但getenv('APPLICATION_ENVIRONMENT')返回false。

在sharedhost根的.htaccess我的域,我用這個.htaccess文件

Options +ExecCGI 
AddHandler php-cgi .php 
Action php-cgi /cgi-bin/php.cgi 

<FilesMatch "^php5?\.(ini|cgi)$"> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
</FilesMatch> 

Options -indexes 

php5.cgi位於/ cgi-bin目錄和工作得很好。 當然在我的應用程序的根文件夾的我還有另外的.htaccess定義:

SetEnv APPLICATION_ENVIRONMENT production 

但使用的getenv(「APPLICATION_ENVIRONMENT」),當它返回false,任何想法如何解決這個問題?

+0

只是猜測:也許你的主機不允許這個指令在.htaccess文件中被覆蓋? – 2010-01-05 18:20:46

回答

11

好吧,我終於明白了。在dreamhost上,可以使用fastcgi,因此可以用它聲明環境變量。它包括只是添加這個簡單的腳本

#!/bin/sh 
export PHP_FCGI_CHILDREN=2 
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi 

這是我編譯的PHP5.3.1所在的位置。 該文件上的chmod 744調用dispatch.fcgi,dreamhost的看門狗將允許更多的內存。

之後,我加入到我的域名的.htaccess如下:

Options +ExecCGI 
AddHandler fastcgi-script fcg fcgi fpl 
AddHandler php5-fastcgi .php 
Action php5-fastcgi /dispatch.fcgi 
現在

在應用程序的根我有另一種的.htaccess:

SetEnv APPLICATION_ENVIRONMENT staging 

在PHP腳本通過爲檢索GETENV( 'REDIRECT_APPLICATION_ENVIRONMENT');

+0

哦謝謝你!我正試圖在.htaccess中設置一個環境變量。我終於可以通過將PHP作爲CGI應用程序更改爲FastCGI來實現它。 – 2013-11-14 03:48:14

+5

爲什麼使用getenv('REDIRECT_APPLICATION_ENVIRONMENT')而不是getenv('APPLICATION_ENVIRONMENT')? – 2014-06-14 16:20:06

+0

爲此,我不得不忽略環境變量的前綴「REDIRECT_」部分。 – 2014-06-14 17:24:51

9

對於SetEnv指令工作,你的託管服務必須有mod_env模塊激活...

但是,即使它被激活,也許你沒有權限使用SetEnv

爲了確保問題不在您的代碼中,您可能需要檢查phpinfo()的輸出:在頁面底部應該有一個包含PHP的環境變量部分 - 如果您的是不在那裏,這對你來說不是一個好兆頭...

+0

是的,你是對的,我沒有找到生產服務器下的PHP變量下的任何東西,我在我的開發機器上。我正在聯繫他們對此的支持,並嘗試提供解決方法的答案。 – 2010-01-05 19:50:44

+0

@Steven:祝你好運^^ – 2010-01-05 20:05:00