PHP 未写入标准输出

PHP stdout not written

我正在 Apache httpd 网络服务器(不是由我管理)上编写 PHP 脚本 运行。在函数中,变量$outfile作为函数参数给出,函数的开头是这样的:

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

我用 $outfile = NULL 调用这个函数,所以 $fh 应该指向标准输出。我可以通过删除条件进一步简化它:

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

重点是,它只输出

Hello,

而不是我所期待的:

Hello, world!

怎么会出现这个问题,我该如何规避这个问题?

使用 php://output 而不是 php://stdout。正如 documentation 所说

php://output is a write-only stream that allows you to write to the output buffer mechanism in the same way as print and echo.

php://stdout 直接写入 stdout 文件描述符,因此它不会与 echo.

的缓冲输出正确同步