我直接从终端启动 php 并传递一个 .php 脚本来运行,我没有使用网络浏览器。
冲洗的文档()说
刷新 PHP 和任何后端 PHP 的系统写入缓冲区 使用(CGI、网络服务器等)。这试图推动电流输出 一直到浏览器,但有一些注意事项。
因此基于此,当您需要在脚本结束之前立即将输出发送到终端时,听起来可能仍然需要 flush()
,因为它说的是“PHP 的系统写入缓冲区”。但我想确切地知道。我目前正在使用 php 8.1,但我的问题希望不是特定于版本的。
我想从熟悉 PHP 的 C 实现的人那里知道,当从终端启动时,它是否在任何情况下都会缓冲输出,或者是否只有在服务器以特殊方式启动 PHP 时才会发生这种情况。我知道如果我运行的代码有意通过使用 ob_start()
或类似的东西请求缓冲,那么它应该缓冲并且不会通过调用 flush()
结束,这不是我要问的。我问的是没有明确请求任何缓冲的代码。
为什么不自己测试一下呢?
<?php
// ob_start();
print "Test 1\n";
sleep(1);
print "Test 2";
sleep(5);
print "Test 3";
flush();
sleep(5);
在我的测试终端(标准 Ubuntu 20.04.5 LTS)上,ob_start
缓冲 everything,并完全忽略 flush()
。如果没有 ob_start
,所有文本都会立即输出(即使没有像第二个测试那样以 LF 结束)。
我手边没有 PHP 8.1,但我的说,
> PHP 8.2.1 (cli) (built: Jan 18 2023 10:17:15) (NTS)
> Copyright (c) The PHP Group
> Zend Engine v4.2.1, Copyright (c) Zend Technologies