触发PHP7的未定义类常量:注意
我一直在重命名代码中的一些常量,当发布到生产环境时,我经常在apache日志中看到以下消息:触发PHP7的未定义类常量:注意,php,Php,我一直在重命名代码中的一些常量,当发布到生产环境时,我经常在apache日志中看到以下消息: [Sun Feb 16 19:56:29.437393 2020] [php7:notice] [pid 15948] [client 10.0.1.10:24984] Undefined class constant 'SUBMIT_STA_', referer: https://xxxx.yyyy.com/runtest/QuestionDisplayer 之后没有,之前没有。有很多事情我不明白:
[Sun Feb 16 19:56:29.437393 2020] [php7:notice] [pid 15948] [client 10.0.1.10:24984] Undefined class constant 'SUBMIT_STA_', referer: https://xxxx.yyyy.com/runtest/QuestionDisplayer
之后没有,之前没有。有很多事情我不明白:
- 未定义的类常量如何触发通知而不是致命错误
- 为什么我不能得到更多关于错误在代码中出现的位置(如脚本和行号)以及其他错误的信息?
显然,当我查看我的代码时,我没有找到任何SUBMIT_STA_的实例,我找到了一些SUBMIT_STA_XX或SUBMIT_STA_YY,但没有任何SUBMIT_STA,后面没有任何内容李>
因此,您希望查看代码并找到缺少引号的字符串
SUBMIT\u STA
(或者$
符号,如果它应该是一个变量)好的,很抱歉我解决了它。我终于找到了使用这个不可抗拒常数的地方。它触发此异常消息的原因是因为它位于try/catch(Throwable$e)处理程序中,在这种情况下,屏幕上不会显示错误,Apache会记录一条[php7:notice]消息。我已经能够重现这种行为。恐怕不是这样。您描述的内容将触发一条类似警告的消息:使用未定义的常量Z-假定为“Z”(这将在未来版本的PHP中引发错误),并且将有完整的调用堆栈、触发的行号等。。。这里不是这样。@thesailorbreton您是在开发环境中还是在相同的生产环境中遇到这个错误的?当配置为suchI在登录Dev时出现相同错误时,生产中的登录可能会减少,我已经理解了原因。当错误在try/catch(Throwable$e)处理程序中时,就会发生这种情况。屏幕上不会触发任何错误,日志中只显示一条通知。请注意,由于7.2使用了不存在的常量触发警告,因此它会在该版本之前触发通知。谢谢,我使用的是7.3.13,但是警告看起来像:“使用未定义的常量Z-假定为'Z',然后将显示错误行和调用堆栈