3.2.3 - 普通 - 未处理
问题是这样的,我生产环境下一台服务器搁几天机会出现Tp记录的找不到如下这种找不到模板文件的错误:112.95.13.194 /index/Index
ERR: 模板不存在:/mnt/Server/Tpl/Home/Index_Index.tpl刚开始还以为是空控制器没做好,但是排查后发现这是一个很巧的bug,如上错误提示中:访问的控制为IndexController,而PHP中类的方法名是不区分大小写的,url中触发的方法为为Index(通过Reflection类其实反射到了index方法上了),而我的index方法中渲染模板的方法display并没有传递参数,料想这个错误日志的记录就是display方法空参数,Tp自己按规则生成模板文件目录时调用了/mnt/Server/Tpl/Home/Index_Index.tpl;而实际上应该是/mnt/Server/Tpl/Home/Index_index.tpl。以下是一些可能带来影响的配置:
'URL_CASE_INSENSITIVE' => false, // 默认false 表示URL区分大小写 true则表示不区分大小写
'URL_MODEL' => 2, 入口代码也带上吧! if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
//绑定User模块
define('BIND_MODULE','Home');
//定义独立的模板目录
define('TMPL_PATH',realpath('../Tpl/').'/');
//关闭目录保护--自动生成首页索引文件
define('BUILD_DIR_SECURE', false);
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',false);
// 定义应用目录
define('APP_PATH',realpath('../App/').'/');
//ThinkPHP核心框架所处目录 绝对目录
define('THINK_PATH',realpath('../ThinkPHP').'/');
// 引入ThinkPHP入口文件
require THINK_PATH.'ThinkPHP.php';这算不上非常严重的bug,但存在这样一个隐患:别有用心之人疯狂的请求让你自己的代码狂写错误日志。 