ストリーム型のファイルへの書き込み
参考: fopen
参考: fwrite
参考: fclose
-
fopen,fwrite,fcloseの3つセットで記述する
.contact.datファイルを作成しておく
test.phpを作成及び編集
test.php
<?php
$contactFile = '.contact.dat';
// ファイルを開く モード 'a+' は 読み込み/書き出し用でオープン 書き込みは常に追記
$contents = fopen($contactFile, 'a+');
// 追記したい文字を定義
$addText = 'テスト1' . "\n";
// 書き込み実行
fwrite($contents, $addText);
// ファイルを閉じる
fclose($contents);
test.phpにアクセスして、.contact.datファイルを確認すると以下のようにテキストが書き込まれる。
.contact.dat
テスト1
書き込みの排他的ロックをかけてみる
参考: flock
-
flock()関数の第1引数にはファイルポインタ、第2引数にはロックの種類を指定する。 -
LOCK_EXは排他的ロックで、他のプロセスによる読み書きを阻止する。 -
ロックを解除するには、
flock($contents, LOCK_UN)を呼び出します。 -
ロック処理は必ず
fopen()の後で行い、ロックの解除は必ずfclose()の前に行うようにする。 -
ロックの種類には
LOCK_SH(共有ロック)、LOCK_UN(ロック解除)などがあり、状況に応じて適切なロックを使用する。
test.phpを編集
test.php
<?php
$contactFile = '.contact.dat';
// ファイルを開く モード 'a+' は 読み込み/書き出し用でオープン 書き込みは常に追記
$contents = fopen($contactFile, 'a+');
// 排他的ロックをかける
if (flock($contents, LOCK_EX)) {
// 追記したい文字を定義
$addText = 'テスト1' . "\n";
// 書き込み実行
fwrite($contents, $addText);
// ロックを解除する
flock($contents, LOCK_UN);
}
// ファイルを閉じる
fclose($contents);
以上です。