我正在尝试构建一个错误类和我过去使用的很多错误类,使用文件和 LINE 来显示错误发生的位置,但是他们在功能中使用它们,所以它们总是一样的,这是非常无用的信息。除了发送包含 FILE 和 LINE 的数组与每个函数(这会非常痛苦)之外,我无法想到或发现任何其他内容。有没有好方法或功能来确定正在执行该功能的正确行号和文件?
示例:
<?php
// file1.php
dosomething(false);
?>
<?php
// file2.php
function dosomething($input) {
if ($input === false) die("Error at Line (line) in File (file)");
}
?>
该函数将因“文件 /file1.php 中的第3行错误”消息而死亡。
答案 0 :(得分:4)
我想解决方案可能是使用debug_backtrace
。
给定的示例得到这样的回溯:
array(2) {
[0]=>
array(4) {
["file"] => string(10) "/tmp/a.php"
["line"] => int(10)
["function"] => string(6) "a_test"
["args"]=>
array(1) {
[0] => &string(6) "friend"
}
}
[1]=>
array(4) {
["file"] => string(10) "/tmp/b.php"
["line"] => int(2)
["args"] =>
array(1) {
[0] => string(10) "/tmp/a.php"
}
["function"] => string(12) "include_once"
}
}
所以,应该包括你想要的东西; - )
如果您只想输出跟踪(不太可能),还有debug_print_backtrace
。
答案 1 :(得分:0)
检查set_error_handler函数: http://us3.php.net/manual/en/function.set-error-handler.php 您可能还想查看set_exception_handler函数。
答案 2 :(得分:0)
我在我的网站上使用的功能:
<!DOCTYPE HTML>
<html>
<head>
<title>Determine what line a function was executed from</title>
</head>
<body>
<?php
function linea($string1, $linea, $string2 = NULL)
{
$string2 = !empty($string2) ? $string2 : '';
return $string1 . $linea . $string2;
}
echo linea('Error: ', __LINE__) . '<br />';
/*
...
lot of code
...
*/
echo linea('Alert -> ', __LINE__, '!') . '<br />';
?>
</body>
</html>
输出:
Error: 13
Alert -> 19!