fwrite関数の使い方(ファイルに書き込む)

PHP で用意されている組み込み関数の一つである fwrite 関数の使い方です。 fwrite 関数はファイルへデータを書き込みます。この関数ではバイナリモードで書き込みが行われます。

(2022 年 09 月 28 日公開 / 2022 年 09 月 28 日更新)

fwrite関数の書式と基本的な使い方

fwrite 関数は次のように定義されています。

int fwrite(resource handle, string string [, int length])

引数のハンドルで指定したファイルポインタの位置に指定した文字列を書き
こみます。バイト数が指定されている場合は、バイト数分だけ書き込みます。
(指定したバイト数よりも文字列が小さい場合には文字列を書き込んだ時点
で終了)。

引数:
  handle  対象となるファイルのハンドル
  string  書き込む文字列
  length  一度に書き込む最大バイト数
返り値:
  書き込んだバイト数。エラーが起こった場合はFALSE

書き込まれる位置はfopenで指定したモードによって異なります。「r+」「w」「w+」「x」「x+」の場合はファイルポイントが先頭に設定されますので、上書きでファイルの先頭から上書きで書き込みが行われます。「a」「a+」の場合はファイルポインタがファイルの最後に設定されますので、既存のファイルの内容の最後に追加される形で書き込みが行われます。

またバイナリモードでの書き込みですので、Windows環境で使う場合にはfopenのモードに「b」を追加して下さい。(例:「ab」「wb」)。

実際の流れは下記のようになります。

$data = 'abcdefg';

$fp = fopen('filename', 'ab');

if ($fp){
    if (flock($fp, LOCK_EX)){
        if (fwrite($fp,  $data) === FALSE){
            print('ファイル書き込みに失敗しました');
        }else{
            print($data.'をファイルに書き込みました');
        }

        flock($fp, LOCK_UN);
    }else{
        print('ファイルロックに失敗しました');
    }
}

fclose($fp);
サンプルコード

では実際に試してみます。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
$data = 'abcdefg';

$fp = fopen('sample.txt', 'ab');

if ($fp){
    if (flock($fp, LOCK_EX)){
        if (fwrite($fp,  $data) === FALSE){
            print('ファイル書き込みに失敗しました<br>');
        }else{
            print($data.'をファイルに書き込みました<br>');
        }

        flock($fp, LOCK_UN);
    }else{
        print('ファイルロックに失敗しました<br>');
    }
}

$flag = fclose($fp);

if ($flag){
    print('無事クローズしました');
}else{
    print('クローズに失敗しました');
}

?>
</body>
</html>

書き込みの対象となる"sample.txt"は下記のようなファイルです。

fwriteのテスト

サンプルプログラムを Web サーバに設置しブラウザ経由で見ると下記のように表示されます。

fwriteのテスト

今回は追加する形で書き込みを行いましたので"sample.txt"は下記のようになっています。

fwriteのテスト

では次に上書きした場合も試してみます。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
$data = 'abcdefg';

$fp = fopen('sample.txt', 'wb');

if ($fp){
    if (flock($fp, LOCK_EX)){
        if (fwrite($fp,  $data) === FALSE){
            print('ファイル書き込みに失敗しました<br>');
        }else{
            print($data.'をファイルに書き込みました<br>');
        }

        flock($fp, LOCK_UN);
    }else{
        print('ファイルロックに失敗しました<br>');
    }
}

$flag = fclose($fp);

if ($flag){
    print('無事クローズしました');
}else{
    print('クローズに失敗しました');
}

?>
</body>
</html>

書き込みの対象となる"sample.txt"は下記のようなファイルです。

fwriteのテスト

サンプルプログラムを Web サーバに設置しブラウザ経由で見ると下記のように表示されます。

fwriteのテスト

今回は上書きする形で書き込みを行いましたので"sample.txt"は下記のようになっています。

fwriteのテスト

上書きの場合は、既存の内容が全て消えた上で頭から書き込みということになりますので注意して下さい。

-- --

PHP で用意されている組み込み関数の一つである fwrite 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。