有时我的脚本会产生错误,主要是警告。 我有时会想到为什么会发生这种情况,但我也不知道为什么会发生这种情况。
现在我的问题:如果显示警告,我可以看到变量中的内容吗?
“警告:在......”中为foreach()提供的参数无效;
我收到此消息但没有任何线索,变量中有什么。 问题是,它是一个运行几个小时的脚本,具有不同的数据,因此很难重现它。因为,我不知道变量中有什么。
我需要这种警告/错误/通知/致命错误等。
感谢您的帮助。
P.S。
答案 0 :(得分:1)
你有一整篇专门针对错误的php:http://www.php.net/manual/en/book.errorfunc.php
来自php手册:http://www.php.net/manual/en/function.set-error-handler.php
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
switch ($errno) {
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Aborting...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
echo "Unknown error type: [$errno] $errstr<br />\n";
break;
}
/* Don't execute PHP internal error handler */
return true;
}
答案 1 :(得分:0)
有很多警告/错误,通常你应该只应用逻辑。
Warning: Invalid argument supplied for foreach() in ....
这意味着foreach中的某些变量无效:
foreach ($array as $value)
或
foreach ($array as $key => $value)
如果您的脚本与该确切语法不匹配,或者$ array不是实际数组,则会触发错误。
答案 2 :(得分:0)
为日志记录的长期使用设计一个debbuging变通方法并不容易。基本上在这种情况下,您需要使用:
调整特定的foreach
foreach (must_be_array($var) as $whatever) ...
然后定义断言函数:
function must_be_array($var) {
if (is_array($var)) return $var;
print_r(array_slice(debug_backtrace(), 1));
// return array(); // to remove now redundant warning
}
debug_backtrace
提供了额外的上下文信息(称为函数和参数可能会有所帮助)。但是它不会告诉你数组变量应该是什么。它仍然是一个空变量。
答案 3 :(得分:0)
查看set_error_handler()
和debug_backtrace()
。
此外,如果有一个特定的行/ foreach
循环定期产生此错误,请在它之前的行上添加类似这样的代码......
if (!is_array($shouldBeAnArry)) {
// log something here, including data about the variable
// from var_dump(), debug_backtrace() etc etc
} else {
// do the loop
}
所有错误/警告等都是如此 - 如果弹出错误,请添加一些验证以在之前对线路上的错误原因进行反击。