このコードを使用してトークンをphpファイルに保存しようとしていますが、2kb後にファイルが不思議なことに空になり、すべてのデータが失われます。なぜこれが起こるのですか?どうすれば防ぐことができますか?
$fh = fopen('token.txt', 'a+');
fwrite($fh, $access_token . "\n");
fclose($fh);
このコードを使用してトークンをphpファイルに保存しようとしていますが、2kb後にファイルが不思議なことに空になり、すべてのデータが失われます。なぜこれが起こるのですか?どうすれば防ぐことができますか?
$fh = fopen('token.txt', 'a+');
fwrite($fh, $access_token . "\n");
fclose($fh);
他の場所のコメントによると、ファイルを使用して複数の同時プロセスからのデータを保存することは失敗のレシピです。ファイルの読み取りまたは書き込みを試みる前に、ファイルで有効な flock() を取得することにより、(デッドロックや競合状態が発生するリスクがありますが) 損傷を最小限に抑えることができます。
$fh = fopen('token.txt', 'a');
if (flock($fh, LOCK_EX)) {
fwrite($fh, $access_token . "\n");
fflush($fh);
flock($fh, LOCK_UN);
} else {
trigger_error("failed to lock file");
}
fclose($fh);
ログを記録するだけの場合は、syslog 機能を使用してください。CRUD 操作の完全なセットを実行している場合は、DBMS を使用します。
いくつかのアイデア:
a+
に変更しますa
。コードから、読み取り/書き込みではなく、書き込みのみが必要であるように見えます。df -h
) とユーザーのディスク クォータ ( quota -h
) を確認してください。スペースがありませんか?