エントリー

PHPでファイル入出力(続き)

この記事の続き。ファイル入出力の具体的なコード。

/* ファイルの先頭に追加 */
$no   = 0;
$data = '';

$fp = fopen('data.txt', 'r') or exit('error!');
while ($line = fgets($fp)) {
  if (intval($line) > $no) {
    $no = intval($line);
  }
  $data .= $line;
}
fclose($fp);

$no++;

$fp = fopen('data.txt', 'w') or exit('error!');
fwrite($fp, "$no\t" . date('H:i:s') . "\n$data");
fclose($fp);
/* ファイルの末尾に追加 */
$no   = 0;
$data = '';

$fp = fopen('data.txt', 'r') or exit('error!');
while ($line = fgets($fp)) {
  if (intval($line) > $no) {
    $no = intval($line);
  }
  $data .= $line;
}
fclose($fp);

$no++;

$fp = fopen('data.txt', 'w') or exit('error!');
fwrite($fp, "$data$no\t" . date('H:i:s') . "\n");
fclose($fp);
/* 任意の行を編集 */

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

$fp = fopen('data.txt', 'r') or exit('error!');
while ($line = fgets($fp)) {
  if (intval($line) == $no) {
    $data .= "$no\t" . date('H:i:s') . "\n";
  } else {
    $data .= $line;
  }
}
fclose($fp);

$fp = fopen('data.txt', 'w') or exit('error!');
fwrite($fp, $data);
fclose($fp);
/* 任意の行を削除 */
$no   = 3; //No.3のデータを削除
$data = '';

$fp = fopen('data.txt', 'r') or exit('error!');
while ($line = fgets($fp)) {
  if (intval($line) != $no) {
    $data .= $line;
  }
}
fclose($fp);

$fp = fopen('data.txt', 'w') or exit('error!');
fwrite($fp, $data);
fclose($fp);

でも、単にファイルの末尾にデータを追加し続ける場合は、'a+'を使って、ロックも自前で行ったほうが圧倒的に効率が良さそう。(この場合は、一時的にデータを保存する変数のために、無駄に巨大なメモリを消費する必要は無いので。)

/* ファイルの末尾に追加 */
$fp = fopen('data.txt', 'a+') or exit('error!');
flock($fp, LOCK_EX);

$no = 0;
while ($line = fgets($fp)) {
  if (intval($line) > $no) {
    $no = intval($line);
  }
}
$no++;

fwrite($fp, "$no\t" . date('H:i:s') . "\n");

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

今のところ、こんな感じで。

ページ移動

ユーティリティ

カテゴリー

検索

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

過去ログ

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

Feed