Jas*_*vis 3 php error-handling
我曾经看到一个框架或来自某些 PHP 的代码,它有一个错误处理程序(类或函数),它会显示错误消息、发生错误的行号以及实际的源代码,如果有某种错误的话代码,它将显示导致错误的实际 PHP 文件中的一行或几行。这真的很酷,我知道您不想在实时生产服务器/站点上这样做,但是为了调试,它非常好,这是我以前从未见过的。
我不记得我在哪里看到这个或它是如何完成的。如果您对如何做类似的事情有任何想法,我很想有一个不错的小类来处理错误,可以做类似的事情,如果可以,请分享任何代码、想法等,非常感谢您的帮助,谢谢你!
您所说的是堆栈跟踪,在 PHP 中您可以使用debug_backtrace()检索它。
大多数框架都有自己的显示堆栈跟踪的方式,但基本上它们都使用这样的功能。
但是,您真正要寻找的是Xdebug,它是 PHP 的调试器和分析器,可让您逐步运行代码。
编辑:
如果你想处理错误以提供你自己的工作方式,你必须使用set_error_handler()和set_exception_handler()
一个简单的例子:
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "[$errno] $errstr" . PHP_EOL;
echo "On line $errline in file $errfile" . PHP_EOL;
$range = array(
$errline - 5,
$errline + 5,
);
$source = explode(PHP_EOL, file_get_contents($errfile));
for ($i = $range[0]; $i <= $range[1]; ++$i) {
if ($i === count($source)) break;
if ($i === $errline-1) {
printf("%d | %s <<<<< Here is the error\n", $i, $source[$i]);
} else {
printf("%d | %s \n", $i, $source[$i]);
}
}
}
set_error_handler('myErrorHandler');
error_reporting(E_ALL);
$a = 'Setting variable $a';
$obj = new Stdclass();
$obj->foo = 'bar';
// Oops I'm calling an undefined variable
echo $undefinedVariable;
$numbers = array(1,2,3,4,5);
for($i = 0; $i < 5; ++$i) {
$numbers[$i] = $i - 1;
}
Run Code Online (Sandbox Code Playgroud)
在 cli 上尝试这个,应该会告诉你:
bguery@joyless:sandbox $ php debugbacktrace.php
[8] Undefined variable: undefinedVariable
On line 33 in file debugbacktrace.php
28 | $obj = new Stdclass();
29 | $obj->foo = 'bar';
30 |
31 | // Oops I'm calling an undefined variable
32 | echo $undefinedVariable; <<<<< Here is the error
33 |
34 | $numbers = array(1,2,3,4,5);
35 | for($i = 0; $i < 5; ++$i) {
36 | $numbers[$i] = $i - 1;
37 | }
38 |
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个非常基本的用法,但它确实有效。您可能需要做更多的工作,如果你打算处理E_ERROR,E_PARSE等,您可能需要使用register_shutdown_function()
| 归档时间: |
|
| 查看次数: |
2210 次 |
| 最近记录: |