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

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

作成日: 更新日:

基本的な使い方

fputs関数は、指定されたファイルポインタに文字列データを書き込むことを実行する関数です。この関数は、すでにfopen()関数などによって書き込み用に開かれているファイルリソースに対し、任意の文字列データを書き込む際に使用されます。例えば、プログラムの実行ログをファイルに出力したり、処理結果をファイルとして保存したりする場面などで利用されます。

具体的には、第一引数に書き込み先のファイルポインタ($handle)を、第二引数にファイルに書き込みたい文字列データ($string)を指定します。オプションとして第三引数に書き込む最大バイト数($length)を指定することも可能です。$lengthを指定した場合、$stringの先頭からそのバイト数までがファイルに書き込まれるか、$stringの終端に達するまでが書き込まれます。

処理が成功した場合、fputs関数は実際にファイルに書き込まれたバイト数を整数値で返します。何らかの理由で書き込みに失敗した場合は、falseを返します。この関数はバイナリセーフであり、改行コードや特殊文字など、どのような内容の文字列でも安全にファイルに書き込むことができます。

PHPにおいてfputs関数はfwrite関数のエイリアス(別名)として提供されており、機能は完全に同一です。そのため、通常はfwrite関数が使われることが多いですが、fputs関数も同様に利用できます。ファイルだけでなく、ネットワークソケットやプロセス間のパイプなど、PHPのストリーム機能が利用できる様々なリソースへの書き込みにも適用可能です。

構文(syntax)

1<?php
2$fileHandle = fopen('output.txt', 'w');
3if ($fileHandle) {
4    fputs($fileHandle, "This is a line written by fputs.\n");
5    fclose($fileHandle);
6}

引数(parameters)

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

  • resource $stream: 書き込み対象のファイルポインタまたはストリームリソース
  • string $data: 書き込むデータ
  • ?int $length = null: 書き込むデータの最大バイト数(省略時は$dataの全バイト数)

戻り値(return)

int|false

書き込みに成功したバイト数を整数で返します。エラーが発生した場合は false を返します。

サンプルコード

fputsとfwriteの違い:ファイル書き込みを検証する

1<?php
2
3/**
4 * fputs と fwrite の違いを示すサンプルコード。
5 * PHPでは、fputs と fwrite は機能的に同じ関数(エイリアス)です。
6 * どちらを使ってもファイルへの書き込みは同様に動作します。
7 */
8
9// 一時ファイルのパスを定義
10$tempFile = 'temp_output_fputs_fwrite.txt';
11
12echo "一時ファイル {$tempFile} を作成し、書き込みます。\n";
13
14// ファイルを開く(書き込みモード 'w')。
15// ファイルが存在しない場合は作成され、存在する場合は内容がクリアされます。
16$fileHandle = fopen($tempFile, 'w');
17
18// ファイルが開けなかった場合のエラーハンドリング
19if ($fileHandle === false) {
20    echo "エラー: ファイル '{$tempFile}' を開けませんでした。\n";
21    exit(1); // スクリプトを終了
22}
23
24// fputs を使用してファイルにデータを書き込む
25// fputs は fwrite のエイリアスです。
26$data1 = "これは fputs を使って書き込まれた行です。\n";
27$bytesWritten1 = fputs($fileHandle, $data1);
28
29if ($bytesWritten1 === false) {
30    echo "エラー: fputs での書き込みに失敗しました。\n";
31    fclose($fileHandle); // ファイルを閉じる
32    unlink($tempFile);   // 作成されたファイルを削除
33    exit(1);
34}
35echo "fputs で {$bytesWritten1} バイト書き込みました。\n";
36
37// fwrite を使用してファイルにデータを書き込む
38// fwrite も fputs と同じように機能します。
39$data2 = "これは fwrite を使って書き込まれた行です。\n";
40$bytesWritten2 = fwrite($fileHandle, $data2);
41
42if ($bytesWritten2 === false) {
43    echo "エラー: fwrite での書き込みに失敗しました。\n";
44    fclose($fileHandle);
45    unlink($tempFile);
46    exit(1);
47}
48echo "fwrite で {$bytesWritten2} バイト書き込みました。\n";
49
50// ファイルを閉じる
51fclose($fileHandle);
52echo "ファイルを閉じました。\n\n";
53
54echo "書き込まれた内容を確認するために、ファイルを再度読み込みます。\n";
55
56// ファイルを読み込みモード 'r' で開く
57$fileHandle = fopen($tempFile, 'r');
58
59if ($fileHandle === false) {
60    echo "エラー: ファイル '{$tempFile}' を読み込みモードで開けませんでした。\n";
61    // この時点でファイルは存在するため、念のため削除を試みる
62    unlink($tempFile);
63    exit(1);
64}
65
66echo "--- {$tempFile} の内容 ---\n";
67// ファイルの終端に達するまで1行ずつ読み込む
68while (!feof($fileHandle)) {
69    echo fgets($fileHandle);
70}
71echo "--------------------------\n";
72
73// ファイルを閉じる
74fclose($fileHandle);
75echo "ファイル読み込みを終了しました。\n";
76
77// 作成した一時ファイルを削除する
78unlink($tempFile);
79echo "一時ファイル '{$tempFile}' を削除しました。\n";
80
81?>

PHPのfputs関数は、開いているファイルに文字列データを書き込むために使用します。PHP 8では、fputsfwrite関数のエイリアス(別名)であり、機能的な違いはありませんので、どちらを使ってもファイルへの書き込みは同様に動作します。

この関数の引数は、resource $streamstring $data?int $length = nullの三つです。最初の$streamには、fopen関数などで取得したファイルのリソース(ファイルハンドル)を指定します。次に$dataには、ファイルに書き込む文字列を渡します。最後の$lengthはオプションで、整数値を指定すると$dataの文字列の先頭からそのバイト数だけが書き込まれます。$lengthを省略した場合は、$dataの文字列全体が書き込まれます。

戻り値は、書き込みに成功した場合は実際にファイルへ書き込まれたバイト数(整数値)を返します。何らかの理由で書き込みが失敗した場合はfalseを返しますので、戻り値を確認して適切にエラーハンドリングを行うことが重要です。

提供されたサンプルコードでは、一時ファイルを作成し、fputsfwriteの両方を使ってそれぞれ文字列をファイルに書き込んでいます。その後、書き込まれた内容を読み込みで確認することで、両関数がファイル書き込みにおいて同様に機能することを示しています。最後に、作成した一時ファイルを削除するまでの一連の流れが示されています。

PHPでは、fputsfwriteは機能的に同じエイリアス関数です。どちらを使ってもファイルへの書き込みは同様に動作しますが、コードの可読性を高めるため、プロジェクト内で使用する関数を統一すると良いでしょう。ファイルを開く際はfopenfalseを返す可能性があるため、常に結果を確認し、エラーハンドリングを行うことが重要です。同様に、fputsfwriteの書き込みが失敗してfalseを返す可能性もあるため、これらの戻り値も適切にチェックしてください。ファイルへの書き込み後は、必ずfcloseでリソースを解放し、ファイルロックやリソース枯渇を防ぐ必要があります。fopen'w'モードを使用すると、既存のファイル内容がすべて上書きされる点に注意が必要です。また、fputsfwriteの第三引数$lengthを指定することで、書き込むバイト数を制限することも可能です。

fputsでファイルに改行を含めて書き込む

1<?php
2
3/**
4 * fputs関数を使用してファイルに文字列を書き込み、改行を挿入するサンプルコードです。
5 *
6 * このスクリプトを実行すると、'example.txt' という名前のファイルが作成され、
7 * 指定された文字列が改行とともに書き込まれます。
8 */
9
10// 書き込み対象のファイルパスを定義
11$filePath = 'example.txt';
12
13// ファイルを書き込みモード ('w') で開きます。
14// ファイルが存在しない場合は作成され、存在する場合は内容がクリアされます。
15// 'w' の代わりに 'a' (追記モード) を使うと、既存の内容を保持しつつ末尾に追加できます。
16$fileHandle = fopen($filePath, 'w');
17
18// ファイルが開けなかった場合の処理
19if ($fileHandle === false) {
20    echo "エラー: ファイル '{$filePath}' を開くことができませんでした。\n";
21    exit(1); // スクリプトを終了
22}
23
24// ファイルに書き込むデータ。改行文字 '\n' を含めます。
25$data = "fputsによる1行目のデータです。\n";
26$data .= "fputsによる2行目のデータです。これは改行されます。\n";
27$data .= "これは最後の行です。\n";
28
29// fputs (fwrite のエイリアス) を使用してファイルにデータを書き込みます。
30// 戻り値は書き込まれたバイト数、失敗した場合は false です。
31$bytesWritten = fputs($fileHandle, $data);
32
33// 書き込みが成功したかを確認
34if ($bytesWritten === false) {
35    echo "エラー: ファイル '{$filePath}' への書き込みに失敗しました。\n";
36} else {
37    echo "ファイル '{$filePath}' に {$bytesWritten} バイトを書き込みました。\n";
38}
39
40// ファイルハンドルを閉じます。
41// これにより、書き込みが完了し、リソースが解放されます。
42fclose($fileHandle);
43
44echo "ファイル '{$filePath}' が作成(または更新)されました。内容を確認してください。\n";
45?>

PHPのfputs関数は、ファイルに文字列を書き込むために使用される関数です。このサンプルコードは、fputs関数を使ってファイルに文字列を書き込み、改行を挿入する基本的な方法をシステムエンジニアを目指す初心者の方にも分かりやすく説明しています。

まず、fopen関数で書き込み対象のファイル(例: 'example.txt')を書き込みモード('w')で開きます。このとき返される「ファイルリソース」が、fputs関数の最初の引数$streamに渡されます。ファイルが開けなかった場合は、エラー処理を行うことが重要です。

次に、ファイルに書き込みたい文字列を準備します。この文字列はfputs関数の第二引数$dataとして渡されます。文字列中に改行文字である\nを含めることで、ファイル内でも改行が反映されます。また、オプションの第三引数$lengthを指定すると、$dataの先頭から指定されたバイト数のみが書き込まれます。

fputs関数は、書き込みが成功した場合は実際に書き込まれたバイト数を整数値で返します。書き込みに失敗した場合はfalseを返しますので、この戻り値を確認することで、処理の成否を判断し、適切なエラーハンドリングを行うことができます。

書き込みが完了したら、必ずfclose関数を使って開いたファイルリソースを閉じます。これにより、書き込みが確定し、システムのリソースが適切に解放されます。この手順を踏むことで、安全かつ確実にファイルへデータを書き込むことができます。

fputs関数はfwrite関数の別名であり、ファイルへの文字列書き込みに使用します。ファイルを開く際にはfopenのモードに注意し、'w'モードは既存ファイルを上書きするため、データ消失を避けるには追記用の'a'モードを選ぶことも検討してください。書き込み後は必ずfcloseでファイルハンドルを閉じ、リソースを解放し書き込みを確実に完了させることが重要です。また、fopenfputsの戻り値がfalseでないか常に確認し、ファイル操作が失敗した場合のエラー処理を行うようにしてください。文字列に改行を挿入するには、明示的に\nを含める必要があります。

関連コンテンツ

【PHP8.x】fputs関数の使い方 | いっしー@Webエンジニア