thinkphp开启debug的同时,如何不对外显示错误信息?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文还是接着说最近接到的这个老的thinkphp系统的事情啊,这个系统是基于thinkphp@3.2.3的,很古老了不是?所以,也是有一定的风险的。所以,黑客兄弟也是盯着这个系统一直在鼓捣。

大家好,这里是苏南大叔的“程序如此灵动”博客,本文讲述如何既开启debug,又对外不显示thinkphp的错误信息。测试环境:php@5.6,thinkphp3.2.3。
为啥不关闭debug
由于兼容性的问题,一旦关闭上面的这个变量,页面上的小错误,也会导致500错误,连正常的页面也不能显示了。但是一旦开始debug,这些错误都会被捕捉处理。很奇怪对吧?这里并不细究这个问题。反正,就是在这个项目中,APP_DEBUG变量必须要开启的意思。
index.php:
define("APP_DEBUG", true);
// ...但是,这样的话,会出现一个新的问题。就是如果访客恶意输入一些网址的话,就会显示一些错误信息,有暴露服务器私密信息的嫌疑。如下图所示:

这些都是黑客们最喜爱的报错信息...
修改默认exception页面
上述异常报错页面,其实也看不出太详细的错误信息,还不如/data/runtime/logs/里面显示的更加详细。所以,这里可以配置一下这个exception页面。
thinkphp的默认路径是:/Public/exception.tpl。thinkcmf的默认路径是:/public/exception.html。
当您阅读这篇文章的时候,上述默认路径很可能已经发生了变化,不要抱怨,使用关键词搜索大法可以快速定位您想要的任何页面。请自己去定位页面位置,这个操作非常简单。

修改exception页面路径
这个exception页面位置是由这个变量TMPL_EXCEPTION_FILE定义的。所以,您可以在config.php里面直接修改这个变量。具体的情况具体分析,如下的语句是范例。
修改路径的前提也是:修改了异常报错信息的模板。否则达不到本文中所描述的隐藏报错信息的目的。
array(
'TMPL_EXCEPTION_FILE' => SITE_PATH . 'public/exception.html', //thinkcmf
'TMPL_EXCEPTION_FILE' => './Public/exception.tpl', //thinkphp
//...
);
参考文献
- https://newsn.net/say/thinkphp5-debug.html
- https://newsn.net/say/thinkphp-log.html
- https://newsn.net/say/thinkcmf-debug.html
结束语
thinkcmf基于thinkphp,thinkphp有个APP_DEBUG的开关变量,还有个TMPL_EXCEPTION_FILE变量,可以修改默认的异常页面来达到隐藏敏感信息的目的。
下面的链接,是苏南大叔写的一些有关thinkcmf的文章,欢迎点击: