12

Windows7のApache2.2でphp5_moduleとしてPHP5.3を使用する。

上記の構成でstdoutはどこに行きますか?

次のコードでテスト済み:

<?php
    $stdout = fopen('php://stdout', 'w');
    fwrite($stdout, "stdout<br />\n");

    $output = fopen('php://output', 'w');
    fwrite($output, "output<br />\n");
?>

これはブラウザにのみ表示されますoutput。stdoutはどうなりますか?

4

1 に答える 1

26

マニュアルがphp://ラッパーのマニュアルページに示されているように:

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

したがって、ブラウザに出力を書き込みたい場合は、php://output

一方で、php://stdout

PHPプロセスの対応する入力または出力ストリームへの直接アクセスを許可します。

Apacheの場合、この出力はApacheのstdoutハンドルであり、これはApacheのコンソール出力であり、通常はバックグラウンドで実行されるため、通常はどこにも表示されません。コンソールのフォアグラウンドでApacheを実行する場合、書き込んだ内容php://stdoutはすべてコンソールに表示されます。Apacheはバックグラウンドで実行されるため、stdout通常はどこにもデータがキャプチャまたは書き込まれません。

これをテストするには、次の手順に従います。

  • フォアグラウンドでApacheを実行します(例/usr/local/apache2/bin/httpd -D FOREGROUND -k start
  • コンソールウィンドウを開いたままにします
  • ブラウザからスクリプトを実行する
  • stdoutコンソールで出力を探します。
于 2012-07-03T21:11:38.793 に答える