打印多行时PHP控制台反转滚动

标签 php linux terminal console

我正在编写一个仅在命令行上运行的 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/

相关文章:

php - Mysql查询在Phpmyadmin中有效,但在PHP中无效

php - JSON 架构验证 : validate array of objects

php - PHP 数组是否需要在使用前声明?

linux - 如何在 Linux 中避免共享 IRQ 竞争

php - 如何在我的历史日志中隐藏 OpenSSL 使用的密码?

java - 在哪里为在 glassfish 4 中运行的应用程序设置系统变量

c++ - 竞争条件效应

mysql - 获取 mysqldump : [ERROR] unknown variable 'column-statistics=0' when exporting database though shell in MAMP

r - 假人的Makefile? Mac OS X

macos - zsh:权限被拒绝