はじめに
PHPには「ファイル」「ネットワーク」「メモリ」など、あらゆる入出力を一貫して扱える“ストリーム”という仕組みがあります。その中でも php://output は、echo や print と同じように 出力バッファへ書き込むためのストリーム です。
ただし、使い方を間違えると エラーになる ため注意が必要です。今回はその挙動を整理してみましょう。
目次
🧠 php://outputとは?
php://output は、PHPの出力バッファ(echo や print が書き込む領域)に直接アクセスできる「書き込み専用ストリーム」です。
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://outputは echo と同じ出力先 に書き込めるストリーム。- ただし
fwrite('php://output', ...)は誤りで、リソースを開いて使う必要がある。 - 試験では「ストリームラッパーの基本動作」と「リソース型の扱い」が問われることが多いです。
