关闭

thinkPHP框架

265人阅读 评论(0) 收藏 举报

下午试着改写控制器基类 Action中定义的方法,发现无效果,翻了下资料,原来是第一次 控制器基类 Action中的方法在第一次运行的时候就生成在了核心缓存文件~runtime.php中,故改写原系统目录/Lib/Think/Core下的代码无效,如需更改,可:

1. define( 'NO_CACHE_RUNTIME' , True);//不生成核心文件

2.修改后删除核心文件,重新运行重新生成.

 

ThinkPHP 正式版本开始引入了新的项目编译机制,所谓的项目编译机制是指系统第一次运行的时候会自动生成核心缓存文件 ~runtime.php 和项目编译缓存文件 ~app.php ,这些编译缓存文件把核心和项目必须的文件打包到一个文件中,并且去掉所有空白和注释代码,因为存在一个预编译的过程,所以还会进行一些相关的目录检测,对于不存在的目录可以自动生成,这个自动生成机制后面还会提到。当第二次执行的时候就会直接载入编译过的缓存文件,从而省去很多 IO 开销,加快执行速度。项目编译机制对运行没有任何影响,预编译操作和其他的目录检测机制只会执行一次,因此无论在预编译过程中做了多少复杂的操作,对后面的执行没有任何效率的缺失。

编译缓存文件,默认是自动生成在项目目录下面的 Runtime 目录下面。如果希望自己设置目录,可以在入口文件里面设置 RUNTIME_PATH 进行更改,例如

define( 'RUNTIME_PATH' , './MyApp/temp/' );

注意在 Linux 环境下面需要对 RUNTIME_PATH 目录设置可写权限。

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

其他类库可以在操作方法中使用系统导入机制或者自动加载机制完成加载。

项目编译缓存文件 ~app.php 通常包含了下面的一些文件:项目配置文件(由惯例配置、项目配置合并而成)、项目公共函数文件 common.php 。每个项目还可以单独添加自己的项目编译文件列表,只需要在项目配置目录下面定义 app.php 文件,返回需要额外添加到项目编译缓存的文件列表数组即可。

注意在调试模式下面不会生成项目编译缓存,但是依然会生成核心缓存。 如果不希望生成核心缓存文件的话,可以在项目入口文件里面设置 NO_CACHE_RUNTIME ,例如:

define( 'NO_CACHE_RUNTIME' , True);

以及设置对编译缓存的内容是否进行去空白和注释,例如:

define( 'STRIP_RUNTIME_SPACE' , false);

则生成的编译缓存文件是没有经过去注释和空白的,仅仅是把文件合并到一起,这样的好处是便于调试的错误定位,建议部署模式的时候把上面的设置为 True 或者删除该定义。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15820次
    • 积分:13
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:14篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档