自动获取模板文件名大小写错误

浏览:4230 发布日期:2015/10/18
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,但存在这样一个隐患:别有用心之人疯狂的请求让你自己的代码狂写错误日志。
评论(
后面还有条评论,点击查看>>