Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

いきおいでPHPを勉強する。その6

ファイルを扱うときのポイント

ファイルを扱うときの処理の流れ

  • ファイルを開くfopen()
    • 読み
    • 書き
    • 両方
  • ファイルをロックする flock()
    • 共有
    • 排他
  • データを読み込む
  • ファイルに追記する
  • ファイルを上書きする
  • ロックを解除する
  • ファイルを閉じる

flock()関数で使用するロック方法

  • 共有ロック
    • 他のユーザによる読み取りは許可
    • 書き込みは禁止
  • 排他的ロック
    • 他のユーザからの読み書きをともに許可しない

通常は, ファイルを読み取る時には共有ロック、書きこむときには排他ロックを使用する。

  • LOCK_SH(1)共有ロック
  • LOCK_EX(2)排他的ロック
  • LOCK_UN(3)ロックを解除
  • LOCK_NB(4)ロック中にflock()でブロックさせない

2通りのファイル処理

  • fopen()-fclose()関数を使用する

    • fgets()
      ファイルのデータを読み取る
    • fgetc()
      ファイルから1文字読み取る
    • fread() バイナリモードでファイルを読み取る
    • fwrite() ファイルにデータを書き込む(fputs()と同じ)
  • fopen()-fclose()関数を使わない

    • file()関数 ファイル全体を配列に格納する
    • file_get_contents() ファイル全体を読み取る
    • file_put_contents() ファイルにデータを書き込む

file($file_name)とファイル名を指定して実行するだけで、フ ァイル全体を配列に格納できる。   

$array = file("test.txt");

ファイルポインタの位置

fopen()関数を使って、ファイルを開く際の書き込みモード + r   + 読み + ファイルポインタ:先頭 + r+
+ 読み/書き + ファイルポインタ:先頭 + w
+ 書き + ファイルポインタ:先頭 + w+
+ 書き/読み + ファイルポインタ:先頭 + a
+ 書き + ファイルポインタ:終端 + a+
+ 書き/読み + ファイルポインタ:終端 + x
+ 書き + ファイルポインタ:先頭 + x+
+ 書き/読み + ファイルポインタ:先頭

改行文字を含めてデータを書き込む(追記)

<html>
<head>
<title>改行文字を含めてデータを書き込む(追記)</title>
</head>
<body>
<p>改行文字を含めてデータを書き込む(追記)</p>
<?php
// ファイル名
$file_name = "test.txt";

// ファイルを追記モードで開く
$file = fopen($file_name, "a") or die("OPENエラー $file_name");

// ファイルをロックする(排他的ロック)
flock($file, LOCK_EX);

// 書き込む文字列
$string = "文字列を書き込みます\n";

// データを書き込む
fputs($file, $string);

// ロックを解除する
flock($file, LOCK_UN);

// ファイルを閉じる
fclose($file);
?>
</body>
</html>