代码之家  ›  专栏  ›  技术社区  ›  zaf

自动检测内部/外部开发环境

  •  8
  • zaf  · 技术社区  · 15 年前

    function devIsLocal(){
    
        $res=false;
    
        $http_host=$_SERVER['HTTP_HOST'];
    
        if($http_host=='localhost')$res=true;
        if($http_host=='127.0.0.1')$res=true;
        if(substr($http_host,-4)=='.lan')$res=true;
        if(strpos($http_host, '.')===false)$res=true;
    
        return($res);
    
    }
    

    如您所见,它只依赖于HTTP\u主机值。

    当然,如果您在本地使用某种虚拟主机(如example.com),那么该函数将被欺骗。

    有没有其他方法来愚弄函数?我们还可以窥视哪些其他变量/地方来确定我们的位置?

    5 回复  |  直到 15 年前
        1
  •  12
  •   fuxia    15 年前
    '127.0.0.1' == $_SERVER["REMOTE_ADDR"]
    

    这永远不会被视为 TRUE 在您的实时系统上。:)

        2
  •  15
  •   Andy Shellam    15 年前

    在Apache虚拟主机配置中设置环境变量。Zend框架就是这样做的。

    看到了吗 ZF quick start guide 例如,“创建虚拟主机”部分

    SetEnv APPLICATION_ENV "development"
    

    然后在应用程序中,使用 getenv 函数获取值:

    $environment = getenv("APPLICATION_ENV");
    if ($environment == "development")
    {
        // do development stuff
    }
    else if ($environment == "live")
    {
        // do live stuff
    }
    
        3
  •  3
  •   Community Mohan Dere    8 年前

    Andy Shellam's answer ..

    如果您使用的是mod\u vhost\u alias,或者具有具有相同(虚拟)文档根的不同域,则可以根据参数设置变量,例如。

    SetEnvIf SERVER_ADDR x.x.x.x APPLICATION_ENV=development
    SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=development
    
        4
  •  1
  •   Piskvor left the building Rohit Kumar    15 年前

    创建并稍后查找仅存在于实时服务器文件系统上的文件。

    当然,你的环境应该尽可能相似;我的建议是这样的:在目录/var/environment/中,有一个名为{devel | test | qa | staging | live}的文件,具体取决于您所在的服务器—然后检查文件名。

    当然,您需要将此文件从版本控制和任何生成过程中排除。

        5
  •  0
  •   symcbean    15 年前

    当然,如果您在本地使用了example.com之类的虚拟主机,那么该函数将被欺骗。

    另外,如果主机不是本地的,而是使用widlcard或默认vhost defn,并且用户将IP地址添加到本地的主机文件中。

    我建议在include路径上有一个目录,该目录也存在于live上,但不在那里复制,只需存储:

    function getEnv(){
      return 'Live';
    }
    

    function getEnv(){
      return 'Test';
    }
    

    如果两个环境都在同一台服务器上-您仍然可以通过在Apache config或.htaccess中设置include\u路径来实现这一点。

    C

    推荐文章