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