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

zaf*_*zaf 8 php development-environment production-environment autodiscovery

我们使用以下函数自动检测我们是在机器内部还是在实时服务器上,然后为各种组件选择适当的配置:

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);

}
Run Code Online (Sandbox Code Playgroud)

如您所见,它仅依赖于HTTP_HOST值.

当然,如果您在本地使用某种类型的虚拟主机,例如example.com,那么该功能将被欺骗.

有没有其他方法来欺骗这个功能?还有哪些其他变量/地方可以用来确定我们的位置?

And*_*lam 15

在Apache虚拟主机配置中设置环境变量.这是Zend Framework实现它的方式.

有关示例,请参阅ZF快速入门指南("创建虚拟主机"部分.)

在httpd.conf或.htaccess文件中,输入:

SetEnv APPLICATION_ENV "development"
Run Code Online (Sandbox Code Playgroud)

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

$environment = getenv("APPLICATION_ENV");
if ($environment == "development")
{
    // do development stuff
}
else if ($environment == "live")
{
    // do live stuff
}
Run Code Online (Sandbox Code Playgroud)


fux*_*xia 11

'127.0.0.1' == $_SERVER["REMOTE_ADDR"]
Run Code Online (Sandbox Code Playgroud)

这永远不会像TRUE你的实时系统一样评估.:)

  • 如果您使用面向公众的IP地址访问本地服务器,也不会. (2认同)