我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文还是接着说最近接到的这个老的thinkphp系统的事情啊,这个系统是基于thinkphp@3.2.3的,很古老了不是?所以,也是有一定的风险的。所以,黑客兄弟也是盯着这个系统一直在鼓捣。

苏南大叔:thinkphp开启debug的同时,如何不对外显示错误信息? - thinkphp-exception-page
thinkphp开启debug的同时,如何不对外显示错误信息?(图4-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,本文讲述如何既开启debug,又对外不显示thinkphp的错误信息。测试环境:php@5.6thinkphp3.2.3

为啥不关闭debug

由于兼容性的问题,一旦关闭上面的这个变量,页面上的小错误,也会导致500错误,连正常的页面也不能显示了。但是一旦开始debug,这些错误都会被捕捉处理。很奇怪对吧?这里并不细究这个问题。反正,就是在这个项目中,APP_DEBUG变量必须要开启的意思。

index.php

define("APP_DEBUG", true);
// ...

但是,这样的话,会出现一个新的问题。就是如果访客恶意输入一些网址的话,就会显示一些错误信息,有暴露服务器私密信息的嫌疑。如下图所示:

苏南大叔:thinkphp开启debug的同时,如何不对外显示错误信息? - 报错页面
thinkphp开启debug的同时,如何不对外显示错误信息?(图4-2)

这些都是黑客们最喜爱的报错信息...

修改默认exception页面

上述异常报错页面,其实也看不出太详细的错误信息,还不如/data/runtime/logs/里面显示的更加详细。所以,这里可以配置一下这个exception页面。

thinkphp的默认路径是:/Public/exception.tpl
thinkcmf的默认路径是:/public/exception.html

当您阅读这篇文章的时候,上述默认路径很可能已经发生了变化,不要抱怨,使用关键词搜索大法可以快速定位您想要的任何页面。请自己去定位页面位置,这个操作非常简单。

苏南大叔:thinkphp开启debug的同时,如何不对外显示错误信息? - 异常处理模版页面
thinkphp开启debug的同时,如何不对外显示错误信息?(图4-3)

修改exception页面路径

这个exception页面位置是由这个变量TMPL_EXCEPTION_FILE定义的。所以,您可以在config.php里面直接修改这个变量。具体的情况具体分析,如下的语句是范例。

修改路径的前提也是:修改了异常报错信息的模板。否则达不到本文中所描述的隐藏报错信息的目的。
array(
    'TMPL_EXCEPTION_FILE' => SITE_PATH . 'public/exception.html',  //thinkcmf
    'TMPL_EXCEPTION_FILE' => './Public/exception.tpl',  //thinkphp
    //...
);

苏南大叔:thinkphp开启debug的同时,如何不对外显示错误信息? - 随便修改的异常页面
thinkphp开启debug的同时,如何不对外显示错误信息?(图4-4)

参考文献

结束语

thinkcmf基于thinkphpthinkphp有个APP_DEBUG的开关变量,还有个TMPL_EXCEPTION_FILE变量,可以修改默认的异常页面来达到隐藏敏感信息的目的。

下面的链接,是苏南大叔写的一些有关thinkcmf的文章,欢迎点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    thinkphp