6

sdtoutストリームを取得してそれに書き込むのとは対照的に、いくつかの文字列をエコーまたはprintfなどするだけのphpコマンドラインアプリの違いは何ですか?

$stdout = fopen('php://stdout', 'w');
4

4 に答える 4

9

私にとって最初に頭に浮かぶのは、出力バッファリングです。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 はバッファリングされていません。

于 2012-08-25T19:34:14.703 に答える
2

違いは、出力バッファ ストリームechoへの書き込みです。php://outputただし、php://stdoutバッファリングされていないプロセスの出力ストリームに直接アクセスできます。

ストリームに関する詳細情報はマニュアルにあります: http://www.php.net/manual/en/wrappers.php.php

于 2012-08-25T19:37:48.677 に答える
0

ここphp://stdoutではバッファリングされたストリームではありません。fwrite は次を使用して出力をバッファリングできます。php://output

于 2013-11-18T10:35:07.967 に答える
0

すでに述べた技術的な違いに加えて、スタイルと慣習にも明らかな違いがあります。 echo/printは、PHP で出力を生成する通常の方法です。ファイルに書き込むかのように出力に書き込むことは異常であり、混乱を招く可能性があります。意図を明確にするために、正当な理由がない限り、これを行うことはお勧めしません。

于 2012-08-25T19:49:17.497 に答える