如何在php中使用getenv(),在共享主机上使用已编译的php-cgi在.htaccess中使用SetEnv

Ste*_*ato 15 php apache .htaccess shared-hosting

只是在上下文中阐明主要问题:

在我的开发机器上,PHP5.3.1作为模块安装在Apache上,我在应用程序的根.htaccess文件中使用SetEnv APPLICATION_ENVIRONMENT开发.然后可以使用getenv('APPLICATION_ENVIRONMENT')从任何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
Run Code Online (Sandbox Code Playgroud)

php5.cgi驻留在/ cgi-bin中并且运行良好.当然在我的应用程序的根文件夹中,我有另一个.htaccess定义:

SetEnv APPLICATION_ENVIRONMENT production
Run Code Online (Sandbox Code Playgroud)

但是当使用getenv('APPLICATION_ENVIRONMENT')时它返回false,任何想法如何解决这个问题?

Ste*_*ato 14

好的,我终于明白了.在dreamhost上,可以使用fastcgi,因此可以使用它来声明环境变量.它只包括添加这个简单的脚本

#!/bin/sh
export PHP_FCGI_CHILDREN=2
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi
Run Code Online (Sandbox Code Playgroud)

这是我编译的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
Run Code Online (Sandbox Code Playgroud)

现在在应用程序的根目录中我有另一个.htaccess:

SetEnv APPLICATION_ENVIRONMENT staging
Run Code Online (Sandbox Code Playgroud)

在PHP脚本中可以通过getenv('REDIRECT_APPLICATION_ENVIRONMENT')检索;

  • 你为什么使用getenv('REDIRECT_APPLICATION_ENVIRONMENT')而不是getenv('APPLICATION_ENVIRONMENT')? (5认同)

Pas*_*TIN 10

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

但是,即使它已被激活,也许您无需使用许可SetEnv.

为了确保问题不在您的代码中,您可能需要检查以下输出phpinfo():在页面底部,应该有一个包含从PHP看到的环境变量的部分 - 如果您不在那里,它是对你来说不是一个好兆头......