thinkphp的debug模式和非debug模式的区别

debug模式

主要是引入了debug.php的配置文件


Paste_Image.png

非Debug模式

当thinkphp在非debug模式下第一次运行是生成runtime文件和对应的文件夹。


runtime文件夹
编译缓存文件~runtime.php

~runtime.php中缓存的编译内容,相当于把index.php引导的所有操作全部集成到~runtime.php文件中。
有了这个缓存的编译文件,index.php在下次运行时,不再引导,而是直接检测是否存在~runtime.php编译缓存文件,如果在,则直接运行~runtime.php。

Paste_Image.png

~runtime.php包含的文件由系统的core.php文件决定,如果是采用了模式扩展的话,就由模式扩展入口文件决定。默认的核心模式下面包含了下面的一些文件:系统定义文件defines.php、系统函数库functions.php、系统基类Think、异常基类ThinkException、日志类 Log、应用类 App、控制器基类 Action、视图类 View。

例如:数据库实例化方法D();


Paste_Image.png

所以非debug模式下,每次代码发布需要清除runtime文件夹内容,避免出现代码问题。

数据库结构缓存DB_FIELDS_CACHE

数据库字段缓存是通过配置DB_FIELDS_CACHE,如果设置为true则生成缓存文件到Data文件夹。
如果DB_FIELDS_CACHE设置为true,第一次实例化model时候回自动生成对应model的字段缓存文件。

生成逻辑,在核心类Think\Model.php的数据库连接方法,最后会调用_checkTableInfo的方法生成字段缓存文件,并且设置当前数据库对象的pk和fields数组(<b>如果设置了DB_FIELDS_CACHE为true,并且缓存文件存在则直接返回缓存文件的字段,如果不存在则重新读取数据库,所以只有字段已缓存后,每次实例化模型的时候$this->fields的字段都是缓存文件的字段。</b>)。

Paste_Image.png
Paste_Image.png

插入数据库

数据入库调用的是Think\model.php里的add方法,入库前调用了数据处理方法_facade。会把数据data和模型的字段$this->fields进行过滤,多余字段删掉,生成入库数据。这也是为什么非debug模式下,新添加字段无法插入数据,因为DB_FIELDS_CACHE为true,生成的缓存字段已经把新增字段过滤了

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容