我在CLI和CGI模式下使用这个PHP代码
在显示下一行之前等待很短的一段时间,我不想一次显示所有五行,我想用下一行替换Line1,依此类推所有十行。
谢谢
if (!defined('STDOUT'))
define('STDOUT', null);
if (!defined('STDERR'))
define('STDERR', null);
function buffer($stream, $message)
{
if (php_sapi_name() == 'cli')
{
// CLI - output to given stream
fputs($stream, $message);
}
elseif (php_sapi_name() == 'cgi-fcgi' || ob_get_level()> 0)
{
// Web but output buffering is on - bypass it
$buffer = ob_get_clean();
echo nl2br($message).str_pad('',4096);
flush();
ob_start();
echo $buffer;
}
else
{
// Web without output buffering
echo $message;
flush();
}
}
for ($i = 0; $i<10; $i++) {
buffer(STDOUT, "Line" . $i . PHP_EOL);
sleep(1);
}
答案 0 :(得分:0)
您的行结尾为\r\n
,意为go to next line and return to start of line
您需要\r
表示return to start of line
并且回显将覆盖行内容。
请记住这种情况:
echo "Hello, my name is JJ\r";
echo "Hello, it is me";
将提供输出
Hello, it is meisJJ
echo
将仅替换回显的符号数量,保持不受影响。我建议在回声结束时添加一些空格
function output($message, $lineLength = 80) {
echo str_pad($message, $lineLength, ' ', STR_PAD_RIGHT);
}