《PHP8上級試験対策》php://output は echo と同じ動きをする?fwriteの正しい使い方を解説

  • URLをコピーしました!

はじめに

PHPには「ファイル」「ネットワーク」「メモリ」など、あらゆる入出力を一貫して扱える“ストリーム”という仕組みがあります。その中でも php://output は、echoprint と同じように 出力バッファへ書き込むためのストリーム です。
ただし、使い方を間違えると エラーになる ため注意が必要です。今回はその挙動を整理してみましょう。

キーワード: php://output / fwrite / ストリームラッパー / 出力バッファ / fopen

目次

🧠 php://outputとは?

php://output は、PHPの出力バッファ(echoprint が書き込む領域)に直接アクセスできる「書き込み専用ストリーム」です。

echo "Hello World\n";

これと同じ効果を「ストリーム操作」で行えるのが php://output です。

⚠️ よくある誤り

次のように、fwrite() の第1引数に 'php://output' という文字列を渡すとエラーになります。

fwrite('php://output', "exam output\n");

fwrite() は第1引数に「ファイルポインタリソース」を要求するため、文字列を渡すと次の警告が発生します。

Warning: fwrite() expects parameter 1 to be resource, string given

✅ 正しい使い方

まず fopen()php://output を開き、そのリソースを使って書き込みます。

<?php
declare(strict_types=1);
error_reporting(-1);

$fp = fopen('php://output', 'w');  // 出力用ストリームを開く
fwrite($fp, "exam output\n");      // 出力バッファへ書き込み
fclose($fp);                       // ストリームを閉じる

出力結果:

exam output

このように fwrite() でも、echo と同じ結果を得ることができます。

図解:php://output のイメージ

+-----------------------+
| PHPスクリプト           |
|                       |
|  fwrite($fp, ...)     |
|        │              |
|        ▼              |
|  php://output -----> 出力バッファ -----> 標準出力(ブラウザなど)
+--------------------+

php://output は「標準出力」へ直接データを流す特別なストリームです。ログファイルではなく、ユーザーに見える「出力」として扱われます。

🧩 試験対策ポイント

項目内容
php://output書き込み専用ストリーム(出力バッファに書き込む)
php://input読み込み専用ストリーム(POSTボディなどを読む)
fwrite()リソース型の引数が必要(文字列は不可)
エラー例fwrite() expects parameter 1 to be resource
対策fopen('php://output', 'w') で開いてから書き込む

📝 まとめ

  • php://outputecho と同じ出力先 に書き込めるストリーム。
  • ただし fwrite('php://output', ...) は誤りで、リソースを開いて使う必要がある。
  • 試験では「ストリームラッパーの基本動作」と「リソース型の扱い」が問われることが多いです。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次