我希望为PHP的解析错误运行一些自定义错误处理 - 语法错误时的类型,你会得到死亡的白屏。
(很明显,运行格式错误的代码时会产生的类型:
<?php
if () {
?>
)
我看了一下设置自定义错误处理程序,但无法发生任何事情。
答案 0 :(得分:3)
另一个想法:如果您有自己的根服务器或只想在本地PC上执行脚本,您可以执行以下操作:
将代码放入新文件中进行测试,例如failure.php
。
在您要检查错误的脚本(同一目录)中,按以下方式执行:
$path_to_test = 'failure.php';
$result = `php -l $path_to_test`;
然后您在$result
中有解析错误消息,因为标志-l
使PHP仅解析代码。它永远不会执行任何事情。您可以自行解析错误消息,甚至可以从中获取行号。
答案 1 :(得分:2)
通常情况下,您会使用set_error_handler
,但文档会注意到这一点:
使用用户定义的函数无法处理以下错误类型:
E_ERROR
,E_PARSE
,E_CORE_ERROR
,E_CORE_WARNING
,E_COMPILE_ERROR
,{{1} },以及调用E_COMPILE_WARNING
的文件中引发的大多数E_STRICT
。
你所拥有的是set_error_handler()
并且不会因此而受到影响。在PARSE_ERROR
页面的“用户评论”部分中,有很多解决方案可以捕获所有错误,有些人认为它有效,有些人说没有,所以我建议只是通过它们并查找是否有任何错误事实上是工作。
答案 2 :(得分:1)
这不是致命错误,因为该术语在PHP中使用。这是一个 Parse错误。这意味着PHP无法理解您的代码,因此根本不会执行代码。因此你无法捕捉到这样的错误。 如果您确定要测试的代码不包含任何有害注入,您可以评估它:
if ( !@eval( 'if () {' ) )
{
echo "An error occured.";
}
但请务必阅读有关如何以及何时使用eval()
的建议。这可能非常危险。