如何在共享主机上使用php中的getenv()和.htaccess中的SetEnv以及编译后的php cgi

如何在共享主机上使用php中的getenv()和.htaccess中的SetEnv以及编译后的php cgi,php,apache,.htaccess,shared-hosting,Php,Apache,.htaccess,Shared Hosting,只需结合上下文来澄清主要问题: 在我的开发机器上,PHP5.3.1作为一个模块安装在Apache上,我在应用程序的root.htaccess文件中使用SetEnv APPLICATION_ENVIRONMENT development。然后,可以使用getenv(“应用程序\环境”)轻松地从任何php脚本中检索它 在生产服务器上的sharedhost(dreamhost)上,我编译了自己的php5.3.1,因为它不受直接支持。除了getenv('APPLICATION_ENVIRONMENT')

只需结合上下文来澄清主要问题:

在我的开发机器上,PHP5.3.1作为一个模块安装在Apache上,我在应用程序的root.htaccess文件中使用SetEnv APPLICATION_ENVIRONMENT development。然后,可以使用getenv(“应用程序\环境”)轻松地从任何php脚本中检索它

在生产服务器上的sharedhost(dreamhost)上,我编译了自己的php5.3.1,因为它不受直接支持。除了getenv('APPLICATION_ENVIRONMENT')返回false之外,其他一切都正常工作

在我的域的sharedhost root.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
但是当使用getenv('APPLICATION_ENVIRONMENT')时,它返回false,您知道如何解决这个问题吗?

要使该指令起作用,您的托管服务必须激活
mod_env
模块

但是,即使它被激活,也许你也不需要获得使用许可


为了确保问题不在代码中,您可能需要检查输出:在页面底部,应该有一个包含PHP中的环境变量的部分——如果您的环境变量不在其中,这对您来说不是一个好迹象……

好的,我终于找到了。在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(“重定向应用程序环境”)检索脚本

为了使$\u ENV工作,我必须在php.ini中重新配置变量。默认情况下,它不包括$\u ENV的E,它最初是
variables\u order=“GPCS”

此指令确定在PHP启动时注册哪些超级全局数组。G、 P、C、E&S是以下各超级规范的缩写: 全局:GET、POST、COOKIE、ENV和SERVER。有一个性能罚款 为这些阵列的注册付费,因为ENV不太常见 与其他产品一样,不建议在产品服务器上使用ENV。你 如果需要,仍然可以通过getenv()访问环境变量 需要

默认值:“EGPCS”

发展价值:“GPCS”

产值:“GPCS”


猜测一下:也许您的主机不允许在.htaccess文件中重写此指令?是的,您是对的,我在生产服务器下的PHP变量下没有找到任何内容,我在我的开发机器上也没有找到。我正在联系他们对此的支持,并将尝试提供一个解决办法的答案。哦,谢谢!!!试图在.htaccess中设置环境变量时,我感到毛骨悚然。通过将PHP从作为CGI应用程序运行改为FastCGI,我终于能够做到这一点。为什么您要使用getenv(“重定向应用程序环境”)而不是getenv(“应用程序环境”)?为了让它对我起作用,我必须去掉前面的“重定向”环境变量的一部分。+1在Magento 1.5使用SetEnvIf主机设置环境变量时出现问题。变量MAGE_RUN_CODE和MAGE_RUN_TYPE在PHP超级全局$_服务器中设置为REDIRECT_MAGE_RUN_CODE和REDIRECT_MAGE_RUN_TYPE。这个答案让我看到了正确的方向。
SetEnv APPLICATION_ENVIRONMENT staging