いきおいで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()と同じ)
- fgets()
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>