yii的配置文件*.php和*-local.php的区别是什么啊?

main和main-local的区别是什么? 为什么会有local和非local的?图片描述

阅读 6.1k
2 个回答

local文件是不存储在git系统中的,而非local的要存储在git系统中。因此非local的配置文件里主要存储了不论是开发系统还是生产环境都要用到的共同配置,而local的配置文件里面写的是对应于不同环境的配置。举个例子来说,你的数据库连接的用户名和密码,这些配置在你的开发环境和生产环境可能是不同的,像这样的配置信息就不应该放在main.php中,而应该放在main-local.php中,这样生产环境和开发环境配置不同,才能正常工作。

main_local.php和main.php最终是合并的,你看这个文件frontend/web/index.php就清楚了,而且main_local.php是在main.php之后合并,换言之,这两个文件(实际上里面是数组)数组key相同的配置,main会被main_local的覆盖,这是让你区分不同环境mysql、redis之类的配置的(比如你本地和线上),对main_local.php文件来说,本地不一定是指你自己的电脑,而是指代码在哪运行,哪里就是本地,比如你本地配置运行了一份代码,则对main_local.php来说,你自己的电脑就是本地,所以你自己电脑上的那份代码main_local.php文件的配置会覆盖main.php的配置,又比如你线上服务器也配置运行着一份代码,那对服务器的main_local.php来说,服务器就是本地,服务器的main_local.php会覆盖服务器的main.php,所以main_local.php文件不能提交到版本系统中(svn/git等等),而是单独编辑,这样既使你修改了main.php的(mysql/redis)配置,也不会影响服务器,因为这些选项都会被服务器中的main_local.php覆盖,除非main_local.php中不存在的选项,才会使用main.php中的配置,那main.php有啥用?有用,虽然main_local.php不加入版本库,但main.php要加入版本库,你可以把本地配置复制一份到main.php中,这样如果有新同事来,它git/svn下载下来的代码,就包住了main.php,它只要复制main.php并改名为main_localphp,然后再把其中的配置修改成他自己电脑上的配置即可,否则他可能都不知道你配置了啥是不?另外,这个也相当于保存了代码啊,毕竟main_local.php是不放在版本系统中的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏