我正在编写一个仅在命令行上运行的 PHP 脚本(思考矩阵)。
此刻,它一遍又一遍地打印一行以新行结尾的代码。当屏幕填满时,它开始滚动每一行。滚动方向是从下到上。
无论如何,是否可以在终端中使用光标位置来反转此行为并开始在屏幕顶部打印代码行,以便从上到下滚动?
示例代码:
for ($lines=1000;$lines>0;$lines--) {
echo "this is a basic line of code\n";
}
我在尝试什么:
for ($lines=1000;$lines>0;$lines--) {
echo "\033[0;0H";
echo "\nthis is a basic line of code";
}
这是一个非常基本的示例,它模拟了我要实现的目标 - php 在位置 0,0 处打印一行。在 0,0 处写入新行,旧行向下移动一行。当一遍又一遍地重复时,卷轴就会反转。
除了使用 ANSI 之外,可能还有其他我不知道的方法可以做到这一点?
对于必然会出现的“终端将因操作系统而异”的评论 --- 我使用的是 mac,这是一个有趣的小项目,所以这就是它需要支持的全部内容
最佳答案
除了 ANSI(或基于 curses 的东西)之外,您别无选择。这是一个 ANSI 示例:
#!/usr/bin/php
<?php
for ( $lines = 1000; $lines > 0; $lines-- ) {
echo "This is line $lines of output\r";
echo "\033[T\033[A";
}
?>
它打印每一行,然后将光标移动到那行的左边距,打印一个反向索引(\033[T
),然后移动光标直到新的空白行 (\033[A
)。它适用于 Terminal.app
有趣的是,php binding for ncurses不提供 terminfo 接口(interface)(与大多数其他语言绑定(bind)不同)。
关于打印多行时PHP控制台反转滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436099/