2016-11-23 5 views
2

私はApacheのWebサーバ(私が管理していない)で動作するPHPスクリプトを書いています。機能では、変数$outfileは、関数の引数として与えられ、そして機能の非常に最初はこれです:PHP stdoutは書かれていません

if (isset($outfile)) 
    $fh = fopen($outfile, 'wb'); 
else 
    $fh = fopen('php://stdout', 'w'); 
echo 'Hello, '; 
fwrite($fh, 'World'); 

私は$outfile = NULLでこの関数を呼び出すので、$fhはstdoutに指している必要があります。私も多くの条件をドロップすることによって、これをダウン取り除くことができます。

$fh = fopen('php://stdout', 'w'); 
echo 'Hello, '; 
fwrite($fh, 'world'); 

ポイントは、それが唯一の代わりに私が期待してい何の

Hello, 

を出力します

Hello, world! 

をどのように来て、どうすればこの問題を回避できますか?

+0

なぜあなたは再びstdoutに書き込んでいますか? – WEBjuju

+0

おそらく出力バッファリングが原因です。 – Barmar

+0

@WEBjuju最初のコードからわかるように、変数 '$ output'は' NULL'かファイル名になります。 – rexkogitans

答えて

2

php://stdoutの代わりにphp://outputを使用してください。 documentation

php://outputを言うように、あなたがprintechoと同じ方法での出力バッファへの書き込みを可能にする書き込み専用のストリームです。

php://stdoutstdoutファイルディスクリプタに直接書き込み、それを適切echoのバッファ出力と同期されることはありません。

+2

'php:// stdout'と' php:// output'の違いは何ですか?これを明らかにすることは、その質問に答えるのに役立つでしょう。 –

+0

'php:// stdout'は標準出力ファイル記述子に直接書き込みを行い、' php:// output'はPHPの出力バッファに書き込みます。 – Barmar

+0

@Barmar、それだけです。だから、明らかに 'echo'は 'php:// stdout'よりも' fwrite'と 'php:// output'のほうがよく似ています。 – rexkogitans

関連する問題