ファイルに書き込む(fwrite)

広告

ファイルからデータを書き込みます。fwrite関数を使います。この関数ではバイナリモードで書き込みが行われます。

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

引数:
  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);

サンプルプログラム

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

functest43.php

<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のテスト

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

fwriteのテスト

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

fwriteのテスト

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

functest44.php

<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のテスト

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

fwriteのテスト

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

fwriteのテスト

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

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)