给php增加一个环境标识

本人的个人项目,部署在阿里云上,公司的开发环境是debian,家里笔记本是fedora,项目是通过git管理的,但是呢,阿里云的数据库是走内网的,所以在公司或家里是不能连接该数据库的,只能使用另一个可以走外网的备用库,其他的组件如memcache,radis也是如此,这就有些麻烦了,在第一次git clone后,往往还要添加数据库和memcache或redis的配置信息,这就需要手工配置了,然后通过.gitignore忽略这些文件。如果我能判断当前环境是哪个机器,然后根据机器的识别号来调用相应的配置文件,是不是就简单多了?

识别机器最简单的是mac地址,但是显然php无法获取到,根据phpinfo()里的System值识别?貌似不知道怎么实现。那么比较简单的方法就是给php增加一个常量,然后赋予不同的值,这样根据这个值就能识别机器了。

前面我已经增加过一个名为tiyee的php扩展了,今天只需要添加一个全局常量就行了。

php在启动的时候调用每个可用的扩展的PHP_MINIT_FUNCTION(tiyee)函数,然后结束的时候会调用PHP_MSHUTDOWN_FUNCTION(tiyee)。在每个请求来的时候,又会调用PHP_RINIT_FUNCTION(tiyee),结束后又会调用PHP_RSHUTDOWN_FUNCTION(tiyee). (注意,括号里的扩展名是不同的,这里只是为了说明才添加tiyee)。

我们需要在php启动的时候就添加常量,所以可以添加在PHP_MSHUTDOWN_FUNCTION里。

代码如下

PHP_MINIT_FUNCTION(tiyee)
{
        REGISTER_STRING_CONSTANT("MAC_ENV",
            "debian", CONST_CS | CONST_PERSISTENT);

        return SUCCESS;
}

第一个参数是常量名,第二个是值,第三个是是否忽略大小写。

完了后,编译make & make install,然后重启php-fpm,然后输出下。

echo MAC_ENV;

看看是不是出现了 debian。这样我们给每个机器赋予不同的值,这样就能识别机器了。(不要在公司的正式环境玩儿这个,后果自负)