2010-01-05 184 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