【问题标题】:PHP CLI, Windows 7 CMD, and CLS/FF need to get along. (Clear Win7 CMD with PHP from CLI)PHP CLI、Windows 7 CMD 和 CLS/FF 需要相处。 (从 CLI 使用 PHP 清除 Win7 CMD)
【发布时间】:2010-12-26 00:05:39
【问题描述】:

现在,我一直在到处寻找实现此目的的方法,显然互联网上没有人知道发生了什么。我所说的互联网是指谷歌的范围。

我正在用 PHP 编写一个终端应用程序,以便在 Windows 7 (x64 Ultimate) 的精美命令提示符下的 PHP CLI 中运行。在程序中,我想清屏。屏幕上显示的数据可以是跨越任意行数的任意数量的字符。我不想要任何退格字符黑客或使用回车的说明。我要清屏。

CMD 有一个花哨的 CLS 命令可以做到这一点。因此,当我运行 PHP 行 system('cls'); 或执行清除屏幕命令的任何变体(包括说使用 system("command /C cls"); 不起作用的一个答案)时,终端输出金星符号。女孩的标志,“倒置的神圣手榴弹”,随便你怎么称呼它。事实证明,这显然是显示换行符的某种方式(如果终端实际表现得如此,则会清除屏幕。)

为什么 PHP CLI 认为显示 CMD 一个女孩会使屏幕清晰,我怎样才能让 CMD 实际上清晰?我试过给它发送一个换行符,给它一个女孩符号,给它发送薯片和饼干以及所有形式的好东西。没有任何效果。所以屏幕将永远保持不清晰,当你必须重新绘制某些东西时,你可以想象这会很烦人。无论如何,欢迎您的帮助。

【问题讨论】:

  • 我正在尝试完成完全相同的事情。 Unix shell 没问题,你可以用 '\[J' 之类的魔法符号清除它们,也许有点不同。我得到了相同的女性标志 :) 恐怕这在 Windows 上是不可能的。

标签: php windows console newline command-line-interface


【解决方案1】:

This 是迄今为止我发现的唯一但非常丑陋的方法:

public function clearStdin()
{
    for ($i = 0; $i < 50; $i++) echo "\r\n";
}

【讨论】:

  • 算我在试图找到一种方法来做到这一点,我找到了一个在 hobby6_at_hotmail.com php.net/manual/en/features.commandline.php 上实际工作的方法,但我不喜欢使用这样的循环,希望有一种更好的方法
【解决方案2】:

经过大量搜索,我终于在依赖 ANSI 的 Windows 7 中找到了适合我的答案:

echo chr(27)."[H".chr(27)."[2J";

这适用于标准控制台,因为我安装了Ansicon...如果您遇到问题,您可能想尝试Console2

如果您要向公众分发 CLI,那么此解决方案还不够好,但对于内部使用,它可能是可以接受的(即,如果您可以在所有机器上运行 ANSI)。

【讨论】:

    【解决方案3】:

    在自己尝试找到解决方案并花了近一个小时没有运气之后,答案就在我面前......

    这是一种有点旧的 skool ASCII 命令方法,今天在 Windows DOS 上仍然有效(在大多数情况下)......我用它来改变输出的颜色。

    如果您是转义键“\033”的八进制引用,那么 DOS 转义字符“[”和一个可以执行许多不同任务的键代码,例如更改颜色和...清除屏幕:)

    使用以下命令清除 php 中的屏幕作为 echo 语句(我还没有设法让 system() 使用此命令,但是 echo 对我来说已经足够了)。

    echo "\033[2J"; //clears the screen
    echo "\033[1;1H"; //resets pointer back to 1,1 (top, left)
    

    我真的希望这对某人有所帮助:)

    延伸阅读:http://www.robvanderwoude.com/ansi.php

    干杯 达尔

    【讨论】:

      【解决方案4】:

      找到一个简单的方法,如果你从一个批处理文件运行 PHP(我在 Win7 x64 Ultimate 上使用 XAMPP):

      cls
      @c:\xampp\php\php program_to_run.php
      

      这个批处理文件在运行 PHP 之前会清屏,甚至因为行首的@ 而不再显示命令 promt。 结果:从清晰的控制台屏幕开始!

      您还可以使用 \r 到达一行的开头,因此如果您只需要重绘一行(例如进度指示器),这可能是一个解决方案。

      【讨论】:

      • 问题是关于 PHP 的。不是批处理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2018-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多