我在php中使用fwrite来记录logs.txt中的一些错误。
问题是,当我打开db_errors.txt时,我看到的是多次保存的消息而不是一次。
我的fwrite代码不在任何循环内,所以它肯定只执行一次。同样的想法是使用第三方记录器类进行的。
if (!$result = mysqli_query($link, $query)){
$today = getdate();
$handle = fopen("logs/db_errors.txt", "a");
fwrite($handle, $today['mday'].'/'.$today['mon'].'/'.$today['year']." | ".mysqli_errno($link)." : ".mysqli_error($link)." | ".$query." \n");
fclose($handle);
}
这将在db_errors.txt内的3行中写入相同的输出。
11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1
11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1
11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1
答案 0 :(得分:0)
我的fwrite代码不在任何循环内,所以它肯定只执行一次。同样的想法是使用第三方记录器类进行的。
如果其他人的代码显示相同的行为,那么您只有一个可能的根本原因:代码被调用三次。
可能需要get out a debugger和add a breakpoint代码,然后逐步完成第一次调用后发生的所有事情。毫无疑问,这将引导您进行后续调用。
您可能还需要考虑在日志中添加完整时间戳和缩略图而不是getdate
。这可以通过证明确实有三次调用来使故障排除更有效。
$time_plus_micro = date('Y-m-d H:i:s') . ' ' . microtime(true)
fwrite($handle, $time_plus_micro . " | ...";