LoginSignup
1
1

PHP ストリーム型のファイルの操作

Posted at

ストリーム型のファイルへの書き込み

参考: 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);

以上です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1