
どうもタスです。
今回は「fprintf」と「vfprintf」についてお伝えしたいと思います。
フォーマット済み文字列の出力やフォーマットのみを行い返却する関数は以前お伝えしたとおりですが、今回はストリームへ書き込む、いわばファイル出力するための文字列フォーマット関数になります。
printfと合わせて学習することで、ファイル出力にも対応しましょう。
概要説明
fprintf:フォーマットされた文字列をストリームに書き込む
vfprintf:フォーマットされた文字列をストリームに書き込む
ストリームとは?
ここで、そもそもストリームとは何ぞや?について突っ込んでみます。
ストリームとは、
連続したデータの流れや、データの送受信や処理を連続的に行うことなどを意味する。 – e-Word –
としており、対象はメモリやファイルなど様々だが、それらを抽象的に扱えるようにしたものと定義されています。
PHPでいうストリームとは、以下の記事が分かりやすかったので引用します。
ファイルなどのリソースに実際にアクセスする方法は、ファイルが保管されている場所とファイルを保管する方法によって決まります。ローカルにあるファイルにアクセスする方法と、リモート・サーバー上にあるファイルに HTTP や FTP によってアクセスする方法は、まったく違います。
幸い、PHP では「ストリーム・ラッパー」を使用できます。たとえどこにあるリソースを呼び出したとしても、PHP で使用可能なラッパーがあれば、そのラッパーが呼び出し方法を見つけ出してくれます。
要は、PHPではストリームを扱うための関数をラッパーとして用意していますよ。
また、なんなら自作もできますよということなのです。
構文説明
1 |
fprintf (resource $handle, string $format [, mixed $...]) : int |
〈引数〉
resource $handle:fopen()を使用して作成したファイルシステムポインタリソース。
string $format:以下を参照。
〈返り値〉
書き込まれた文字列の長さを返します。
1 |
vfprintf (resource $handle, string $format, array $args) : int |
〈引数〉
resource $handle:fopen()を使用して作成したファイルシステムポインタリソース。
string $format:fprintfと同様。
〈返り値〉
書き込まれた文字列の長さを返します。
詳細説明
fprintfとvfprintfの違いは、printfとvprintfの違いと同様、引数の違いです。
fprintfは、カンマ区切りの可変引数なのに対して、vfprintfは配列を渡します。
上記関数により、フォーマット済み関数を直接ストリームに書き込むことができます。
コーディング例
1 2 3 4 5 6 7 8 9 10 |
<?php $str = 'TasuLife'; $ary = array('Blog'); $len = 15; $fp = fopen("tasuLife.txt", "w"); fprintf($fp, "%'@{$len}s\n", $str); // @を15桁になるまで左埋めするフォーマット vfprintf($fp, "%'@{$len}s\n", $ary); // 上記と同様 fclose($fp); |
上記内容をindex.phpとしてWebサーバの公開ディレクトリに置いたので、同階層にtasuLife.txtが作成され、以下の内容が書き込まれています。
@@@@@@@@@@@Blog