0

我在 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 
4

1 回答 1

0

我的 fwrite 代码不在任何循环内,因此它肯定只执行一次。使用第三方记录器类发生了同样的想法。

如果其他人的代码显示相同的行为,那么您只有一个可能的根本原因:代码被调用了 3 次。

可能是时候拿出一个调试器并在代码中添加一个断点,然后单步执行第一次调用后发生的所有事情。这无疑会引导你找到后来调用的来源。

您可能还需要考虑在日志中添加完整的时间戳和微时间,而不是getdate. 通过证明确实存在三个调用,这可以使故障排除更加有效。

$time_plus_micro = date('Y-m-d H:i:s') . ' ' . microtime(true)
fwrite($handle, $time_plus_micro . " | ...";
于 2011-04-11T20:40:44.067 回答