web-dev-qa-db-ja.com

エコーはfputs(STDout)と等しいですか?

echofputs( STDOUT )と等しいですか、それともechoは別のストリームに書き込みますか?私はしばらくの間PHPを使用しましたが、実際に下位レベルで何が起こっているのかよくわかりません。

29
bigblind

ラッパーに関するPHPのマニュアルページ によると、答えは「いいえ」です。

php:// output

php:// outputは書き込み専用のストリームで、print()やecho()と同じ方法で出力バッファメカニズムに書き込むことができます。

printechoは_php://output_ストリームに書き込みますが、fputs(STDOUT)は_php://stdout_に書き込みます。

私は少しテストをしました:

_<?php

$output = fopen('php://output', 'w');
ob_start();

echo "regular echo\n";
fwrite(STDOUT, "writing to stdout directly\n");
fwrite($output, "writing to php://output directly\n");

$ob_contents = ob_get_clean();
print "ob_contents: $ob_contents\n";
_

このスクリプトの出力(PHP 5.2.13、windows)でテスト済み):

_writing to stdout directly
ob_contents: regular echo
writing to php://output directly
_

つまり、STDOUTへの書き込みは、obハンドラーを直接バイパスします。

42
galymzhan