【PHP8.x】fwrite関数の使い方

fwrite関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

fwrite関数は、ファイルポインタへの文字列データ書き込みを実行する関数です。この関数は、fopen()関数などで開かれたファイルリソースに指定された文字列を書き込みます。

第一引数にfopen()から返されるファイルポインタを、第二引数に書き込む文字列データを指定します。オプションの第三引数で書き込む最大バイト数を整数値で指定でき、これを省略した場合は文字列全体がファイルに書き込まれます。

関数は、実際にファイルに書き込まれたバイト数を整数値で返します。書き込みに失敗した場合はfalseが返されます。ディスク容量不足やファイルへの書き込み権限不足などが失敗原因として挙げられます。

fwrite()関数はバイナリセーフであり、どのような内容の文字列でもそのまま書き込めます。また、fputs()関数のエイリアス(別名)でもあります。ログ生成、設定ファイルの更新、データの永続化といったファイル操作で広く利用されます。

構文(syntax)

1<?php
2$fileHandle = fopen('output.txt', 'w');
3if ($fileHandle !== false) {
4    $dataToWrite = 'Hello from PHP fwrite!';
5    $bytesWritten = fwrite($fileHandle, $dataToWrite);
6    fclose($fileHandle);
7}
8?>

引数(parameters)

resource $stream, string $data, ?int $length = null

PHP:

  • resource $stream: 書き込み対象のファイルポインタ(リソース型)
  • string $data: 書き込むデータ(文字列)
  • ?int $length = null: 書き込むデータのバイト数(省略可能、指定しない場合は $data 全体を書き込む)

戻り値(return)

int|false

書き込まれたバイト数を返します。エラーが発生した場合は false を返します。

サンプルコード

PHP fwriteでファイルに改行しながら書き込む

1<?php
2
3/**
4 * 指定されたファイルに複数の行を書き込みます。
5 * 各行の末尾にはOSに応じた改行コードが追加されます。
6 */
7function writeLinesToFile(): void
8{
9    $filePath = 'example.txt'; // 書き込むファイル名
10
11    // ファイルを書き込みモードで開きます。
12    // 'w' モードは、ファイルが存在すれば内容を上書きし、存在しなければ新規作成します。
13    // 成功した場合はファイルリソース、失敗した場合は false を返します。
14    $fileHandle = fopen($filePath, 'w');
15
16    // ファイルが開けたか確認します。
17    if ($fileHandle === false) {
18        echo "エラー: ファイル '{$filePath}' を開けませんでした。" . PHP_EOL;
19        return;
20    }
21
22    $line1 = "これは最初の行です。";
23    $line2 = "これは二番目の行です。";
24    $line3 = "fwrite関数とPHP_EOLを使って改行しています。";
25
26    // 最初の行をファイルに書き込み、OSに応じた改行コードを追加します。
27    // PHP_EOL は現在のOSに適した改行コード (例: Windowsでは \r\n, Linuxでは \n) を提供します。
28    // fwriteは書き込んだバイト数を返します。失敗した場合は false です。
29    if (fwrite($fileHandle, $line1 . PHP_EOL) === false) {
30        echo "エラー: 最初の行の書き込みに失敗しました。" . PHP_EOL;
31        fclose($fileHandle); // エラー時はファイルを閉じる
32        return;
33    }
34
35    // 二番目の行をファイルに書き込み、改行コードを追加します。
36    if (fwrite($fileHandle, $line2 . PHP_EOL) === false) {
37        echo "エラー: 二番目の行の書き込みに失敗しました。" . PHP_EOL;
38        fclose($fileHandle);
39        return;
40    }
41
42    // 三番目の行をファイルに書き込み、改行コードを追加します。
43    if (fwrite($fileHandle, $line3 . PHP_EOL) === false) {
44        echo "エラー: 三番目の行の書き込みに失敗しました。" . PHP_EOL;
45        fclose($fileHandle);
46        return;
47    }
48
49    // ファイルへの操作が完了したら、ファイルを閉じます。
50    fclose($fileHandle);
51
52    echo "ファイル '{$filePath}' にデータが正常に書き込まれました。" . PHP_EOL;
53    echo "ファイルの内容を確認してください。" . PHP_EOL;
54}
55
56// 関数を実行します。
57writeLinesToFile();
58

PHPのfwrite関数は、ファイルにデータを書き込む際に使用されます。最初の引数$streamには、fopen関数などで開かれたファイルの「リソース」(ファイルへの操作権限を示す識別子)を指定します。次の引数$dataには、ファイルに書き込みたい文字列データを与えます。最後の引数$lengthは省略可能で、指定すると$dataの先頭から指定されたバイト数だけが書き込まれ、指定しない場合は$data全体が書き込まれます。関数が成功すると、実際に書き込まれたバイト数が整数値で返され、失敗した場合はfalseが返されるため、エラーチェックが重要です。

サンプルコードでは、fopenexample.txtファイルを書き込みモードで開き、そのリソースを使ってfwriteで複数行の文字列を書き込んでいます。ここで注目すべきは、各行の文字列の末尾にPHP_EOLを結合している点です。PHP_EOLは、プログラムが動作しているオペレーティングシステムに適した改行コード(Windowsなら\r\n、Linuxなら\nなど)を自動的に挿入してくれる定数であり、環境に依存しない形でファイルに改行を追加できます。全ての書き込みが完了したら、fclose関数で開いたファイルを閉じることで、リソースの解放と書き込み内容の確定が行われます。fwriteはファイルの入出力処理において、データの書き込みと改行の管理に広く活用される基本的な関数です。

fwrite関数は書き込みに失敗するとfalseを返すため、戻り値の確認によるエラーハンドリングが重要です。ファイルを開くfopenも失敗する可能性があり、その際もfalseを返すため、必ず処理の成否を確認してください。fopenで開いたファイルハンドルは、処理が完了した後、またはエラーが発生した場合でも、必ずfcloseで閉じる必要があります。これを忘れると、リソースリークやファイルロックの原因となることがあります。また、fopenで指定するファイルモード(例: 'w'は上書き、'a'は追記)によって動作が変わるため、目的に合ったモードを選択してください。PHP_EOL定数を利用することで、実行環境のOSに適した改行コードが自動的に挿入され、環境に依存しない改行を実現できます。

PHP fwriteでUTF-8文字列をファイルに書き込む

1<?php
2
3/**
4 * PHPのfwrite関数を使用してファイルにUTF-8文字列を書き込むサンプルコードです。
5 * fwriteは文字列のバイト列をそのままファイルに書き込むため、
6 * 文字コードを意識する場合は、書き込む文字列自体が適切なエンコーディングである必要があります。
7 */
8function writeUtf8ToFile(string $filename, string $content): void
9{
10    // ファイルを書き込みモード ('w') で開きます。
11    // 'w' モードは、ファイルが存在しない場合は作成し、存在する場合は内容を上書きします。
12    // 戻り値はファイルリソース、または失敗時にfalseです。
13    $fileHandle = fopen($filename, 'w');
14
15    if ($fileHandle === false) {
16        echo "エラー: ファイル '{$filename}' を開けませんでした。\n";
17        return;
18    }
19
20    // fwrite関数でファイルに文字列を書き込みます。
21    // 第1引数: ファイルリソース ($stream)
22    // 第2引数: 書き込む文字列 ($data)。この文字列のバイト列がそのまま書き込まれます。
23    // 第3引数 (オプション): 書き込む最大バイト数 ($length)。指定しない場合、文字列全体が書き込まれます。
24    // fwriteは書き込んだバイト数を返します。失敗時はfalseを返します。
25    $bytesWritten = fwrite($fileHandle, $content);
26
27    if ($bytesWritten === false) {
28        echo "エラー: ファイル '{$filename}' への書き込みに失敗しました。\n";
29    } else {
30        echo "ファイル '{$filename}' に {$bytesWritten} バイトを書き込みました。\n";
31        // PHPスクリプトがUTF-8で保存されている場合、リテラル文字列は通常UTF-8として扱われます。
32        // そのため、fwriteはUTF-8エンコードされたバイト列をファイルに書き込みます。
33        echo "書き込まれた内容は UTF-8 エンコーディングです。\n";
34    }
35
36    // ファイルリソースを閉じます。
37    // これを忘れると、リソースリークやファイルロックの原因となることがあります。
38    fclose($fileHandle);
39}
40
41// --- 実行例 ---
42
43// 出力するファイル名
44$outputFilename = 'output_utf8_example.txt';
45
46// 日本語を含むUTF-8文字列。
47// PHPのソースコードがUTF-8で保存されている場合、この文字列は内部的にUTF-8エンコーディングです。
48$textToWrite = "こんにちは、世界! This is a test string with some UTF-8 characters like é, ü, ñ.";
49
50// 関数を呼び出してファイルに書き込みます。
51writeUtf8ToFile($outputFilename, $textToWrite);
52
53echo "ファイル '{$outputFilename}' が作成されました。内容を確認してください。\n";
54
55?>

PHPのfwrite関数は、開いているファイルに指定した文字列(バイト列)を書き込むために使用されます。

この関数を使うには、まずfopen関数などでファイルを開き、その結果として得られるファイルリソースをfwriteの最初の引数$streamに渡します。次に、ファイルに書き込みたい内容を文字列として第二引数$dataに指定します。fwriteは、この文字列のバイト列をそのままファイルに書き込みます。オプションの第三引数$lengthを指定すると、書き込むバイト数を制限できますが、通常は省略され、文字列全体が書き込まれます。

fwriteは、書き込みに成功した場合、実際にファイルに書き込まれたバイト数を整数で返します。書き込みに失敗した場合はfalseを返しますので、戻り値を確認してエラー処理を行うことが重要です。

文字コードに関してですが、fwrite関数自体は文字列の文字コード変換を行いません。そのため、ファイルに特定の文字コード(例えばUTF-8)で書き込みたい場合は、$data引数にその文字コードでエンコードされた文字列を渡す必要があります。サンプルコードのように、PHPスクリプトがUTF-8で保存されていれば、文字列リテラルはUTF-8として扱われるため、そのままfwriteに渡すことでUTF-8エンコードされた内容がファイルに書き込まれます。書き込み後は、必ずfclose関数でファイルリソースを閉じるようにしてください。

fwrite関数は、指定された文字列のバイト列をそのままファイルに書き込みます。そのため、ファイルに特定の文字コード(例: UTF-8)で書き込む場合は、書き込む文字列自体がその文字コードで適切にエンコードされていることを事前に確認し、必要に応じてmb_convert_encoding関数などで変換してください。

ファイル操作では、fopenfwriteが失敗した場合にfalseを返すため、必ず戻り値をチェックし、適切にエラー処理を行うことが重要です。また、fopenで開いたファイルリソースは、処理後に必ずfcloseで閉じてください。これを怠ると、リソースリークやファイルロックの原因となります。fopenのモード(例: 'w'は既存ファイルを上書き)も、意図しないデータ消失を防ぐため、目的に応じて慎重に選択しましょう。

関連コンテンツ