如果从终端/cli 运行,PHP 的 flush() 会做任何事情吗?

问题描述 投票:0回答:1

我直接从终端启动 php 并传递一个 .php 脚本来运行,我没有使用网络浏览器。

冲洗的文档()

刷新 PHP 和任何后端 PHP 的系统写入缓冲区 使用(CGI、网络服务器等)。这试图推动电流输出 一直到浏览器,但有一些注意事项。

因此基于此,当您需要在脚本结束之前立即将输出发送到终端时,听起来可能仍然需要 flush(),因为它说的是“PHP 的系统写入缓冲区”。但我想确切地知道。我目前正在使用 php 8.1,但我的问题希望不是特定于版本的。

我想从熟悉 PHP 的 C 实现的人那里知道,当从终端启动时,它是否在任何情况下都会缓冲输出,或者是否只有在服务器以特殊方式启动 PHP 时才会发生这种情况。我知道如果我运行的代码有意通过使用 ob_start() 或类似的东西请求缓冲,那么它应该缓冲并且不会通过调用 flush() 结束,这不是我要问的。我问的是没有明确请求任何缓冲的代码。

php command-line-interface flush
1个回答
0
投票

为什么不自己测试一下呢?

<?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
© www.soinside.com 2019 - 2024. All rights reserved.