エントリー

ファイル入出力試行錯誤中

色々読んでみて、'r+' モードは「ファイルの内容が減る可能性がある」という場合には使えないのかと思ったけど、どうやらそうでもないっぽい。

そんな訳で改良版。↓

/* 任意の行を編集 */
$no   = 3; //No.3のデータを編集
$data = '';

$fp = fopen('data.txt', 'r+') or exit('error!');
flock($fp, LOCK_EX);

while ($line = fgets($fp)) {
  if (intval($line) == $no) {
    $data .= "$no\t" . date('H:i:s') . "\n";
  } else {
    $data .= $line;
  }
}

rewind($fp);
fwrite($fp, $data);
ftruncate($fp, ftell($fp));

flock($fp, LOCK_UN);
fclose($fp);

rewind() とか ftell() とか ftruncate() でファイルポインタを操作してやれば、編集によってファイルサイズが減る場合でも対応できるみたい。
これなら素直に排他処理ができるし、どのタイミングでプログラムが強制終了してもデータが吹っ飛ぶことは無いみたいです。

また近々詳しく検証してみるとします。

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed