据我了解,至少对于PHP v7.3,这是 Production 系统的“最佳实践” PHP error_reporting值:
ini_set('error_reporting',E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
我注意到此报告E_WARNING
。
我对忽略警告的不利方面感兴趣,例如:
ini_set('error_reporting',E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED & ~E_WARNING);
这会在底层发出警告,从长远来看,这将对项目中的代码质量不利。到目前为止,很明显,忽略警告是一个坏习惯。
但是,让我们在混合中添加另一个因素。通常会配置一个自定义PHP错误处理程序,以在出现 reported 错误时停止执行。例如,Yii1 handleError函数终止应用程序。我想象许多PHP框架都采用相同的方法。实际上,这会引起一些混乱,因为php docs说:
E_WARNING运行时警告(非致命错误)。 不暂停。
但是(至少在Yii1中),如果error_reporting值中包含E_WARNING
(由于yii自定义错误处理程序),脚本的执行将被暂停。
在我当前的项目中,E_WARNING
是在测试系统上报告的,但目前不在生产中,并且可能需要80个小时来修复所有警告,以便我们可以启用它并遵循最佳实践。我认为这值得付出努力,我将向团队提出建议,但我需要对项目有一些好处,否则我们的投资回报率将被认为过低。到目前为止,我只有2种好处:
- 长期来看,这对于代码质量而言是最好的。
- 如果发生警告,则不停止可能是安全问题。我可以想到的一个示例是,警告可能与无效的正则表达式有关(过去已知无效的正则表达式容易受到攻击)。有时,用户输入会在正则表达式中使用,这肯定会打开攻击向量。
您能想到其他原因吗?
总结我的问题(TL; DR):
如果发生E_WARNING
,不暂停应用程序有什么危险?