在PHP中查找标准输出

在PHP中查找标准输出,php,stdout,command-line-interface,Php,Stdout,Command Line Interface,我有一个在CLI中运行的php脚本,我想显示当前的进度百分比,所以我想知道是否可以更新STDOUT以显示新的百分比 使用rewind()或fseek()时它只是抛出一条错误消息。输出\r,然后刷新以返回到当前行的第一列。如果您想在输出光栅中向后移动或添加颜色之类的操作,写入控制台/终端会异常复杂,而且行为会因您使用的控制台/终端类型而异正在使用。很久以前,一些人提出了一个想法,即建立一个终端的抽象表示,并以此为基础进行写作 有关如何在PHP中执行此操作的详细信息,请参阅。请参阅以下代码: <

我有一个在CLI中运行的php脚本,我想显示当前的进度百分比,所以我想知道是否可以更新STDOUT以显示新的百分比


使用rewind()或fseek()时它只是抛出一条错误消息。

输出
\r
,然后刷新以返回到当前行的第一列。

如果您想在输出光栅中向后移动或添加颜色之类的操作,写入控制台/终端会异常复杂,而且行为会因您使用的控制台/终端类型而异正在使用。很久以前,一些人提出了一个想法,即建立一个终端的抽象表示,并以此为基础进行写作

有关如何在PHP中执行此操作的详细信息,请参阅。

请参阅以下代码:

<?php
echo "1";
echo chr(8);
echo "2";

或者,您可以尝试在命令行输出中使用ncurses,它具有ncurses_move(,)函数,可以让您任意地将输出放在任何您想要的地方。@cazlab:“CLI”不是终端类型。下面的答案非常好,但我想提出另一种方法:保持简单。只需定期输出一行新的进度数据。或者打印一个“.”字符。它不像一次又一次地更新同一行一样酷,但它简单、功能齐全、兼容,无论你的应用程序的输出是进入控制台,还是通过管道传输到文件,它都能正常工作。干杯,这个答案非常完美:)它可能适用于某些7/8位终端模拟,但这是一个混乱的解决方案“混乱”该解决方案适用于所有Linux(bash、shell等)Windows和Mac平台,不需要构建ncurses(主机上可能没有的额外php模块)或其他任何东西。在至少95%的用例中,所有比这更多的东西都是在浪费OPs时间。
echo "Done: ";
$string = "";
for($i = 0; $i < 100; ++$i) {
    echo str_repeat(chr(8), strlen($string));
    $string = $i."%";
    echo $string;
    sleep(1);
}