0

このコードを使用してトークンをphpファイルに保存しようとしていますが、2kb後にファイルが不思議なことに空になり、すべてのデータが失われます。なぜこれが起こるのですか?どうすれば防ぐことができますか?

   $fh = fopen('token.txt', 'a+');
    fwrite($fh, $access_token . "\n");
    fclose($fh);
4

2 に答える 2

2

他の場所のコメントによると、ファイルを使用して複数の同時プロセスからのデータを保存することは失敗のレシピです。ファイルの読み取りまたは書き込みを試みる前に、ファイルで有効な 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 を使用します。

于 2012-10-10T22:36:41.947 に答える
1

いくつかのアイデア:

  1. PHP ページの複数の呼び出しが互いに踏みつけています。2 つのプロセス/スレッドが同じファイルを同時に追加のために開いた場合、結果が空のファイルになっても驚かないでしょう。
  2. オープン モードを からa+に変更しますa。コードから、読み取り/書き込みではなく、書き込みのみが必要であるように見えます。
  3. ファイルシステムの空き容量 ( df -h) とユーザーのディスク クォータ ( quota -h) を確認してください。スペースがありませんか?
于 2012-10-10T22:18:40.333 に答える