前言

公司使用的是 destoon 框架,后续又做了很多二次开发,由于前端人员的疏忽,对原有的样式不熟悉,致使本来就因为内嵌 php 的模板页面非常混乱,有的样式缺失,有的则是开发到一半。

上手 destoon 时,用了大概一周的时间才熟悉了 destoon 特有的路由规则和整体的框架架构。destoon 没有像一般的主流框架那样统一入口文件,所以最外层的文件夹大部分都作为具体模块的访问路径的一部分,然后内部再引入相关的 xx.inc.php 操作文件。没有明确的 mvc 架构,但内部确实有分层的痕迹。*.inc.php 作为控制器部分,接受参数,逻辑判断;*.class.php 作为模型类部分,封装了主要的获取列表、获取单条、数据验证、更新记录、删除记录等 CRUD 方法;而视图部分使用 htm 模板文件,每次请求,都会重新编译 htm 模板文件,将其中的 {} php 内嵌代码修改成 <?php ?> php 标准形式,缓存到默认的缓存目录下,再引入相关缓存文件。

因为是相对比较小众的国内框架,类似 dedecms(织梦),所以用的人不多,官方文档也太潦草,代码更没有什么说明文档或者注释。这些导致发现问题后,寻找解决途径非常的困难。

问题

这两天再往现有维护的 destoon 版本上添加新版本的功能。下载了新版本对比了一些,有一些优化,顺手就改了。然后运行的时候就出现了问题。如标题,通过 xdebug 调试发现,在引入了 global.func.php 文件之后,页面出现一片空白,访问结束。尝试注释掉引入语句,页面恢复正常。

解决

因为是修改了之后出现的新问题,所以最有可能就是新增加的代码有问题。 global.func.php 属于公共函数库文件。include 文件夹下的是系统共用的,然后每个模块也有各自的公共函数库文件。因为模块下的函数库文件函数相对较少,通过排除法,确定了问题函数,原来是函数重复定义了。去除模块下的相关函数即可,或者在问题函数外添加一下判断条件:

if (!function_exists('xxx')) {
...
}
文章目录