ストリーム型のファイルへの書き込み
参考: 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);
以上です。