条件配置:如何检测我是本地还是在线?

时间:2010-01-09 23:15:56

标签: php

我想为本地和离线提供不同的配置。目前,每次我将我的东西上传到网络服务器,我必须确保我不会搞砸不同的配置文件。一个用于本地开发,一个用于在线开发。

我稍微记得几年前,一段代码片段在网上和本地开发之间以某种方式自动区分。

有没有一种安全的方法可以检测到它?

5 个答案:

答案 0 :(得分:4)

我通常使用服务器名称;例如,这是我在博客上使用的内容:

if ($_SERVER['SERVER_NAME'] === 'blog') {
    // Development
} else {
    // Production
}

这是因为:

  • 在我的开发计算机上,使用带有http://blog指令的VirtualHost,通过ServerName (之后没有其他内容)访问博客。
  • 当然,在生产服务器上,ServerName指令比此更长,包含实际的博客服务器名称。

答案 1 :(得分:2)

我已经构建了这个函数来检查当前服务器名称是否有名称服务器记录,通常是本地服务器没有。

<?php
function isLocal ()
{
  return !checkdnsrr($_SERVER['SERVER_NAME'], 'NS');
}
?>

答案 2 :(得分:1)

另一种方法:在开发根目录中设置.htaccess文件:

SetEnv APPLICATION_ENV development

然后阅读:

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV')
                                    ? getenv('APPLICATION_ENV')
                                    : 'production'));

答案 3 :(得分:1)

我的回答与此页面上的Pascal基本相同,但由于您可能更改了开发服务器名称,并且您可能需要在代码中进行多项检查,我更喜欢这样做:

define ('DEV_HOST', 'blog'); // if you just use http://blog locally

然后检查

if ($_SERVER['SERVER_NAME'] == DEV_HOST) {
  // do your tricks
}

答案 4 :(得分:0)

这是一个需要零配置的解决方案,应该可以很快地运行:

function isOnline()
{
    return checkdnsrr('google.com', 'ANY');
}