【问题标题】:Set Application_ENV via virtual host config and read this in PHP通过虚拟主机配置设置 Application_ENV 并在 PHP 中读取
【发布时间】:2011-01-23 15:30:50
【问题描述】:

我喜欢它在 Zend Framework 中的工作方式。我可以通过检查控制器中的 APPLICATION_ENV 常量来了解我当前使用的环境。

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

但不幸的是,我不能在我当前的项目中使用 ZF。如何在我的 PHP 代码中检查这个环境变量?

【问题讨论】:

    标签: php apache zend-framework configuration


    【解决方案1】:

    由于SetEnv设置的值是Apache的环境,你可以得到它

    或者只是

    • getenv — 获取环境变量的值

    如果您在 ZF 项目中查看 public/index.php,您会看到 ZF 使用 getenv

    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? 
                                      getenv('APPLICATION_ENV') : 
                                      'production'));
    

    一种常用的替代方法是从 PHP 中读取主机名并相应地定义常量:

    if(!defined('APPLICATION_ENV')) {
        if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
            define(APPLICATION_ENV, 'development');
        } else {
            define(APPLICATION_ENV, 'production');
        }
    }
    

    这样,您完全不必依赖环境设置。

    【讨论】:

    • 对于仍在阅读此答案的人们需要注意的一点:使用替代方法仅适用于通过 url 执行的脚本,命令行脚本(例如 cron),不知道$_SERVER['SERVER_NAME'] 是,所以将默认为“生产”。确保使用虚拟主机设置。
    • 我必须在这里激活什么?任何特殊模式。我尝试在父目录 .htaccess 文件和 site-enable 文件中使用 SetEnv。 getenv 仍然给我bool(false)。与其他运行良好的服务器相比,我找不到任何不同的地方
    • @yellowsir 检查网络服务器是否允许每个目录的 htaccess 并确保在全局配置中设置时重新启动 apache。
    • @gordon 感谢您的回复,我做了几次第一次是通过启用 AllowOverride 来完成的,对吗? ``` [...] SetEnv APPLICATION_ENV 生产 DocumentRoot /var/www [...] ``
    【解决方案2】:

    您也可以通过$_SERVER 变量访问它。

    【讨论】:

    • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
    【解决方案3】:

    我遇到了同样的问题,然后我解决了。解决问题的方法是在 apache init 脚本中声明所有变量。

    我在centos上使用apache,init脚本位于/etc/init.d/httpd

    添加此代码,但要根据您的具体情况进行更改。

    ORACLE_HOSTNAME=ora11g.home.com; export ORACLE_HOSTNAME
    ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
    ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
    ORACLE_SID=ora11g; export ORACLE_SID
    ORACLE_TERM=xterm; export ORACLE_TERM
    PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH
    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
    export LD_LIBRARY_PATH
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
    export CLASSPATH
    

    这解决了我的问题。我希望这有帮助。

    【讨论】:

    • 我不明白。 Apache httpd 中没有“导出”指令。另外,您如何访问您刚刚在 PHP 中设置的其他变量?也许你没有理解这个问题,或者我错过了一些东西。
    • 它的初始化脚本。 /etc/init.d/httpd 是一个 bash shell 脚本。
    【解决方案4】:

    SetEnv 定义了一个环境变量。

    一旦设置(在您的 Apache 配置中,或在系统级别),您可以使用 getenv 函数读取它的值:

    echo getenv('APPLICATION_ENV');
    


    例如,如果您在 .htaccess 文件中使用它:

    SetEnv TEST glop
    

    您可以使用这部分 PHP 代码:

    var_dump(getenv('TEST'));
    

    你会得到:

    string 'glop' (length=4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 2012-06-16
      • 2012-10-26
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多