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

Yas*_*lev 14 php development-environment production-environment

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

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

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

并且希望从一个源更新SVN而不更改任何内容到我的生产服务器.

理想情况下,我希望能够使用这些设置运行CRON作业.

Mik*_*shi 21

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

<VirtualHost *:80>
(all the host info)
SetEnv SERVER_CONTEXT "dev"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你正在运行CRON JOB怎么样?没有VirtualHost (2认同)

arm*_*nge 13

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

    $local = False;
}
Run Code Online (Sandbox Code Playgroud)

编辑

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


Nan*_*nne 5

使用您在其中包含定义的配置文件

define("DEBUG",true); //set to false for live
Run Code Online (Sandbox Code Playgroud)

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

if(DEBUG){}
Run Code Online (Sandbox Code Playgroud)


El *_*obo 5

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

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

SetEnv ENVIRONMENT PROD
Run Code Online (Sandbox Code Playgroud)

在PHP代码中,您可以使用以下方法检查环境

$env = getenv('ENVIRONMENT');
Run Code Online (Sandbox Code Playgroud)

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