【PHP8.x】fprintf関数の使い方
fprintf関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
fprintf関数は、指定したストリームリソースに対し、フォーマット文字列に従って整形した文字列を書き込む処理を実行する関数です。printf関数が結果を標準出力、つまり画面に表示するのとは異なり、fprintf関数はfopen()関数などで開いたファイルなど、任意のストリームに出力先を指定できる点が特徴です。第1引数には書き込み対象となるストリームリソースを、第2引数には出力する文字列の書式を定義したフォーマット文字列を渡します。このフォーマット文字列には、%s(文字列)や%d(整数)といった変換指定子を含めることができ、第3引数以降で与えられた値がこれらの指定子の箇所に順番に埋め込まれて、最終的な出力文字列が生成されます。関数は処理が成功した場合、書き込まれた文字列のバイト数を整数で返し、書き込みに失敗した場合はfalseを返します。この特性から、ログファイルへの追記や、CSVファイルのような特定の形式を持つデータの生成など、ファイルへの書き込み処理で広く利用されます。
構文(syntax)
1<?php 2// ファイルポインタ(リソース)を取得します。'w' は書き込みモードを意味します。 3$file = fopen('data.txt', 'w'); 4 5// 変数を定義します。 6$product_name = 'Apple'; 7$quantity = 10; 8 9// fprintf関数を使い、フォーマット指定子を含む文字列をファイルに書き込みます。 10// %s は文字列に、%d は整数に置き換えられます。 11fprintf($file, '商品名: %s, 在庫数: %d個', $product_name, $quantity); 12 13// ファイルを閉じます。 14fclose($file); 15?>
引数(parameters)
resource $stream, string $format, mixed ...$values
- resource $stream: 書き込み先のファイルポインタなどのリソースを指定します。
- string $format: 書き込む文字列のフォーマットを指定します。
- mixed ...$values: $format で指定されたフォーマット文字列に対応する値(可変長引数)を指定します。
戻り値(return)
int|false
fprintf関数は、指定されたストリームにフォーマットされた文字列を書き込みます。書き込まれたバイト数を整数で返します。書き込みに失敗した場合はfalseを返します。
サンプルコード
php fprintfで標準エラー出力する
1<?php 2 3// 標準エラー出力に書式付きで文字列を出力する例 4$name = "Taro"; 5$age = 30; 6 7// 標準エラー出力ストリームを取得 8$stderr = fopen('php://stderr', 'w'); 9 10if ($stderr) { 11 // fprintfを使用して、書式付き文字列を標準エラー出力に出力 12 $bytesWritten = fprintf($stderr, "名前: %s, 年齢: %d\n", $name, $age); 13 14 if ($bytesWritten === false) { 15 // エラー処理 16 error_log("fprintf failed to write to stderr."); 17 } 18 19 // ストリームを閉じる 20 fclose($stderr); 21} else { 22 // 標準エラー出力ストリームのオープンに失敗した場合のエラー処理 23 error_log("Failed to open stderr."); 24} 25 26?>
このサンプルコードは、PHPのfprintf関数を使用して、書式付きの文字列を標準エラー出力(stderr)に書き出す方法を示しています。fprintf関数は、指定されたストリーム(ここでは標準エラー出力)に、$format文字列に基づいて書式化されたデータを出力します。
まず、fopen('php://stderr', 'w')で標準エラー出力ストリームを開き、$stderr変数に格納します。php://stderrは、標準エラー出力への書き込み専用ストリームを開くための特別なURLです。
次に、fprintf($stderr, "名前: %s, 年齢: %d\n", $name, $age)を使用して、$nameと$ageの値を書式化し、標準エラー出力に書き込みます。%sは文字列、%dは整数としてそれぞれ$nameと$ageの値に置き換えられます。\nは改行文字です。
fprintf関数は、書き込まれたバイト数を整数値で返すか、エラーが発生した場合はfalseを返します。サンプルコードでは、戻り値がfalseかどうかをチェックし、エラーが発生した場合はerror_log関数を使用してログに記録しています。
最後に、fclose($stderr)でストリームを閉じます。ストリームを閉じることで、リソースを解放し、書き込み操作を完了させます。標準エラー出力ストリームのオープンに失敗した場合も、エラーログに記録するようにしています。fprintf関数は、C言語のfprintf関数と同様の動作をします。引数$streamは書き込み先のストリームリソース、$formatは書式指定文字列、...$valuesは可変長の引数で、$format文字列内のプレースホルダーに置き換える値です。戻り値は、書き込まれたバイト数、もしくはエラー発生時にfalseを返します。
fprintf関数は、指定したストリームに書式付き文字列を出力します。このサンプルでは、標準エラー出力(php://stderr)を利用しています。初心者は、fopen('php://stderr', 'w')でストリームを正しく開く必要がある点に注意してください。ストリームのオープンに失敗した場合の処理も記述しましょう。fprintfの戻り値は、書き込んだバイト数か、エラー時にfalseです。戻り値がfalseの場合、エラー処理を行うようにしてください。最後に、fclose($stderr)でストリームを閉じることを忘れないようにしましょう。これはリソースの解放のために重要です。