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等,它就像一个魅力.
arm*_*nge 13
if($_SERVER["REMOTE_ADDR"]=="127.0.0.1"){
$local = True;
}else{
$local = False;
}
Run Code Online (Sandbox Code Playgroud)
编辑
您还可以检查地址的第一部分,看看服务器是否在本地网络中,再次假设您的服务器在生产时不在本地网络中
使用您在其中包含定义的配置文件
define("DEBUG",true); //set to false for live
Run Code Online (Sandbox Code Playgroud)
并在您的代码中使用它,例如:
if(DEBUG){}
Run Code Online (Sandbox Code Playgroud)
我在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') {}类型代码,因为所有逻辑都在配置中,而不是在代码中).