我们如何检查我们是否在localhost上运行PHP脚本?

时间:2011-01-24 15:58:20

标签: php development-environment production-environment

有没有办法检查我们是否在localhost上运行PHP脚本 - 开发服务器或实时服务器 - 生产服务器?是否有任何PHP常量,变量,函数等可以提供这些信息。

我需要这个为生产和开发服务器设置不同的设置。现在我解析URL以查看它是哪一个,但我想知道有没有更好的方法来做到这一点。我担心的是我们可能会更改脚本的URL,这可能会破坏我的检查。

我看起来很少有一个配置文件和IF条件的解决方案取决于我将定义不同的设置。唯一的问题是,当主机名,document_root或我用来识别本地/远程主机的其他服务器设置发生更改时,我不想更改IF语句。

希望从一个来源更新SVN,而不需要更改我的生产服务器。

我希望能够使用这些设置运行和CRON作业。

9 个答案:

答案 0 :(得分:21)

我在主机定义中使用SetEnv来定位我正在运行的环境(Dev,Stage,Production):

<VirtualHost *:80>
(all the host info)
SetEnv SERVER_CONTEXT "dev"
</VirtualHost>

每个配置文件作为额外的单词:config.dev.ini,config.stage.ini,config.prod.ini等,... 它就像一个魅力。

答案 1 :(得分:12)

if($_SERVER["REMOTE_ADDR"]=="127.0.0.1"){
$local = True;
}else{

    $local = False;
}

修改

您还可以检查地址的第一部分,看看服务器是否在本地网络中,再次假设您的服务器在生产时不在本地网络中

答案 2 :(得分:5)

使用包含定义的配置文件

define("DEBUG",true); //set to false for live

并在您的代码中使用它,例如:

if(DEBUG){}

答案 3 :(得分:5)

我在Apache配置中设置了一个环境变量并检查它。这比使用PHP配置文件更有优势,所有应用程序代码在PROD,TEST,DEV等上保持完全相同;在签出后无需进行更改,因为代码只是从Apache中提取配置。

为了演示,可以在VirtualHost配置中设置以下内容

SetEnv ENVIRONMENT PROD

在PHP代码中,您可以使用

检查环境
$env = getenv('ENVIRONMENT');

如果您觉得需要在任何地方都可以使用它,那么您可以使用define,但我认为没有必要(我使用指定的环境加载相应的配置文件并创建只读单例配置,然后用于检查任何配置选项;优于if ($env == 'PROD') {}类型代码,因为所有逻辑都在配置中,而不是在您的代码中。)

答案 4 :(得分:2)

除非你告诉它,否则服务器不知道它是什么环境。我所做的是使用DEFINE来设置环境。我的应用程序代码在每个实例上都相同,但我的配置文件发生了变化。这样你可以使用.htaccess文件包含每个脚本上的配置文件,并检查它们的设置是什么。

答案 5 :(得分:2)

您可以尝试使用全局$_SERVER['SERVER_NAME']这应该告诉您运行脚本的系统的主机名。您可以使用它来确定要使用的设置(取决于系统)。

我不知道这会输出'localhost',但您可能需要知道开发机器的实际主机名。

答案 6 :(得分:2)

我知道这个词对于PHP开发人员来说可能听起来很奇怪,但您是否考虑过项目的 build

在PHP中没有什么可编译的,但是更改复制文件是任何构建过程的功能之一。您可以指定2个目标:生产 dev 。不需要任何条件,这应该有效,或者可能有效,但在某些情况下不会

答案 7 :(得分:1)

我总是把“config.php”包含在其他php文件中......

它包含类似(主文件)的内容:

$CONFIG['server']="dev";
$CONFIG['db_user']="root";

这样的事...... 所以在家我有一个在那里和在服务器的网站运行我有另一个我不更新,如果没有更改它...

所以在服务器上我有类似的东西:

$CONFIG['server']="prod";
$CONFIG['db_user']="lwu9918_admin";

然后在其他php文件中:

include("config.php");
if($CONFIG['server']=="dev"){echo "Development";}

这样的事情!

答案 8 :(得分:0)

在开发服务器上

* * * * * php -r cronjob.php this_is_dev

在生产服务器上

* * * * * php -r cronjob.php this_is_live

在你的剧本中

switch ($argv[1])
  case 'this_is_dev':
    // load your dev configuration
    break;

  case 'this_is_live':
    // load your live configuration
    break;

  default:
    die('invalid server');
    break;
}

因为是用于cronjob,$argv存在

祝Windows好运:(