sdtoutストリームを取得してそれに書き込むのとは対照的に、いくつかの文字列をエコーまたはprintfなどするだけのphpコマンドラインアプリの違いは何ですか?
$stdout = fopen('php://stdout', 'w');
sdtoutストリームを取得してそれに書き込むのとは対照的に、いくつかの文字列をエコーまたはprintfなどするだけのphpコマンドラインアプリの違いは何ですか?
$stdout = fopen('php://stdout', 'w');
私にとって最初に頭に浮かぶのは、出力バッファリングです。echo
およびprint
出力バッファリングメカニズムとのインターフェースですが、stdout への直接書き込みはそれをバイパスします。
次のスクリプトを検討してください。
<?php
$stdout = fopen('php://stdout', 'w');
ob_start();
echo "echo output\n";
fwrite($stdout, "FWRITTEN\n");
echo "Also echo\n";
$out = ob_get_clean();
echo $out;
出力:
FWRITTEN
echo output
Also echo
これは、バッファリングされていることを示していecho
ますが、fwrite はバッファリングされていません。
違いは、出力バッファ ストリームecho
への書き込みです。php://output
ただし、php://stdout
バッファリングされていないプロセスの出力ストリームに直接アクセスできます。
ストリームに関する詳細情報はマニュアルにあります: http://www.php.net/manual/en/wrappers.php.php
ここphp://stdout
ではバッファリングされたストリームではありません。fwrite は次を使用して出力をバッファリングできます。php://output
すでに述べた技術的な違いに加えて、スタイルと慣習にも明らかな違いがあります。 echo
/print
は、PHP で出力を生成する通常の方法です。ファイルに書き込むかのように出力に書き込むことは異常であり、混乱を招く可能性があります。意図を明確にするために、正当な理由がない限り、これを行うことはお勧めしません。