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

标签 php apache .htaccess shared-hosting

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

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

在生产服务器上,在共享主机(dreamhost)上,我自己编译了 php5.3.1,因为它不被直接支持。一切正常,除了 getenv('APPLICATION_ENVIRONMENT') 返回 false。

在我的域的共享主机根 .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,知道如何解决这个问题吗?

最佳答案

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

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

这是我编译的 PHP5.3.1 所在的位置。 在名为 dispatch.fcgi 的文件上执行 chmod 744,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'); 检索的;

关于php - 如何在共享主机上使用已编译的 php-cgi 在 php 中使用 getenv() 并在 .htaccess 中使用 SetEnv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008123/

相关文章:

php - 使用 PHP、JS 或 JQuery 生成多页 PDF 订单?

javascript - jQuery:确定[服务器的]文档根目录

php - 服务器剪切数组发布数据

java - 如何在 Java 中获取 Apache 环境变量?

php - 如何在 Controller 中为单个操作禁用auth?

php - 如何在 CodeIgniter 中添加多域支持?

php - 如何通过 htaccess 在 url 中允许 1-9 a-z A-Z - _ %?

wordpress - htaccess 将domain2.com重定向到domain1.com/specific-page的 final方法

php - 通过 .htaccess 从 URL 隐藏目录名称

PHP-WAMP 服务器