0

phpでfwriteを使用して、logs.txtにいくつかのエラーを記録します。

問題は、db_errors.txtを開くと、メッセージが1回だけではなく、複数回保存されているのを確認できることです。

私のfwriteコードはループ内にないので、間違いなく1回だけ実行されます。サードパーティのロガークラスを使用して同じことが起こったと思います。

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コードはループ内にないので、間違いなく1回だけ実行されます。サードパーティのロガークラスを使用して同じことが起こったと思います。

他の誰かのコードが同じ動作を示している場合、考えられる根本的な原因は1つだけです。コードが3回呼び出されています。

おそらく、デバッガーを取り出してコードにブレークポイントを追加し、最初の呼び出しの後に発生するすべてのことをステップスルーするときです。これにより、間違いなく後の呼び出しのソースに移動します。

の代わりに、完全なタイムスタンプとマイクロタイムをログに追加することを検討することもできますgetdate。これにより、実際に3つの呼び出しが行われていることを証明することで、トラブルシューティングをより効果的にすることができます。

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