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

有没有办法检查我们是否在localhost上运行PHP脚本 - 开发服务器或实时服务器 - 生产服务器?是否有任何PHP常量,变量,函数等可以给我这些信息。 我需要这个为生产和开发服务器设置不同的设置。现在我解析URL以查看它是哪一个,但我想知道有没有更好的方法来做到这一点。我担心的是我们可能会更改脚本的URL,这可能会破坏我的检查。 我正在寻找一个具有一个配置文件和IF条件的解决方案,具体取决于我将定义不同的设置。唯一的问题是,当主机名,document_root或我用于识别本地/远程主机的其他服务器设置发生更改时,我不想更改IF语句。 并且希望从一个源更新SVN而不更改任何内容到我的生产服务器。 理想情况下,我希望能够使用这些设置运行CRON作业。     
已邀请:
我在主机定义中使用SetEnv来定位我正在运行的环境(Dev,Stage,Production):
<VirtualHost *:80>
(all the host info)
SetEnv SERVER_CONTEXT "dev"
</VirtualHost>
每个配置文件作为一个额外的单词:config.dev.ini,config.stage.ini,config.prod.ini等,... 它就像一个魅力。     
if($_SERVER["REMOTE_ADDR"]=="127.0.0.1"){
$local = True;
}else{

    $local = False;
}
编辑 您还可以检查地址的第一部分,看看服务器是否在本地网络中,再次假设您的服务器在生产时不在本地网络中     
我在Apache配置中设置了一个环境变量并检查它。这比使用PHP配置文件更有优势,所有应用程序代码在PROD,TEST,DEV等上保持完全相同;在签出后无需进行更改,因为代码只是从Apache中提取配置。 要演示,可以在VirtualHost配置中设置以下内容
SetEnv ENVIRONMENT PROD
在PHP代码中,您可以使用以下方法检查环境
$env = getenv('ENVIRONMENT');
如果您觉得需要在任何地方都可以使用它,那么您可以使用
define
,但我认为没有必要(我使用指定的环境加载相应的配置文件并创建只读的Singleton配置,然后使用检查任何配置选项;优于
if ($env == 'PROD') {}
类型代码,因为所有逻辑都在配置中,而不是在您的代码中)。     
使用包含定义的配置文件
define("DEBUG",true); //set to false for live
并在你的代码中使用它,例如:
if(DEBUG){}
    
除非你告诉它,否则服务器不知道它是什么环境。我所做的是使用DEFINE来设置环境。我的应用程序代码在每个实例上都相同,但我的配置文件发生了变化。这样你可以使用.htaccess文件包含每个脚本上的配置文件,并检查它们的设置是什么。     
我知道这个词对于PHP开发人员来说可能听起来很奇怪,但您是否考虑过构建项目? 在PHP中没有什么可编译的,但是更改复制的文件是任何构建过程的功能之一。您可以指定2个目标:生产和开发。不需要任何条件,它应该起作用,或者可以起作用,但在某些情况下不会。     
您可以尝试使用全局
$_SERVER['SERVER_NAME']
这应该告诉您运行脚本的系统的主机名。您可以使用它来确定要使用的设置(取决于系统)。 我不知道这会输出'localhost'然而你可能需要知道你的开发机器的实际主机名。     
我总是把“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";}
这样的事!     
在开发服务器上
* * * * * 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好运:(     
例如,你最好将cli运行程序放在www目录之外 c: iis www是公共html目录 cli文件应放在c: iis下     

要回复问题请先登录注册