【问题标题】:Clear CMD-shell with php用 php 清除 CMD-shell
【发布时间】:2016-04-12 09:16:24
【问题描述】:

我有这个简单的 php 脚本,它每秒输出一个字符串。

<?php
$i = 1;

while(1)
{
    exec("cls");    //<- Does not work
    echo "test_".$i."\n";

    sleep(1);
    $i++;
}

我在 windows (php myscript.php) 上的命令 shell 中执行脚本,并尝试在每个循环之前清除命令 shell。但我不让它工作。有什么想法吗?

【问题讨论】:

  • 根本没有解决方案,除非在 Windows 操作系统上......你可以为此开始赏金:)

标签: php windows shell cmd


【解决方案1】:

这个怎么样?

<?php
$i = 1;
echo str_repeat("\n", 300); // Clears buffer history, only executes once
while(1)
{
    echo "test_".$i."\r"; // Now uses carriage return instead of new line

    sleep(1);
    $i++;
}

str_repeat() 函数在while 循环之外执行,它不会以新行结束每个回显,而是将指针移回现有行,并在其顶部写入。

【讨论】:

  • 这是一个很好的解决方法,我认为这是最好的解决方案。谢谢。
【解决方案2】:

你能检查一下这个解决方案吗

$i = 1;
echo PHP_OS;

while(1)
{
    if(PHP_OS=="Linux")
    {
        system('clear');
    }
    else
        system('cls');
    echo "test_".$i."\n";

    sleep(1);
    $i++;
}

【讨论】:

    【解决方案3】:

    显然,您必须存储变量的输出然后print它才能成功清除屏幕:

    $clear = exec("cls");
    print($clear);
    

    大家一起:

    <?php
    $i = 1;
    
    while(1)
    {
        $clear = exec("cls");
        print($clear);
        echo "test_".$i."\n";
    
        sleep(1);
        $i++;
    }
    

    我在 Linux 上使用 clear 而不是 cls(等效命令)对其进行了测试,它运行良好。

    【讨论】:

    • 哦,太糟糕了。我在 Linux 上进行了测试,并期望 Windows 通过调整命令(从 clearcls)表现类似。
    【解决方案4】:

    重复的➝this question

    在 Windows 下,没有

    @exec('cls');
    

    对不起!你所能做的就是寻找一个可执行文件(不是 cmd 内置命令)like here...

    【讨论】:

      【解决方案5】:

      您必须将输出打印到终端:

      <?php
      $i = 1;
      
      while(1)
      {
          exec("cls", $clearOutput);
          foreach($clearOutput as $cleanLine)
          {
               echo $cleanLine;
          }
          echo "test_".$i."\n";
      
          sleep(1);
          $i++;
      }
      

      【讨论】:

        【解决方案6】:

        如果是 linux 服务器,请使用以下命令 (clear) 如果是窗口服务器使用cls 我希望它会工作

        $i = 1;
        
        while(1)
        {
            exec("clear");    //<- This will work
            echo "test_".$i."\n";
        
            sleep(1);
            $i++;
        }
        

        第二个解决方案

        <?php
        $i = 1;
        echo PHP_OS;
        
        while(1)
        {
            if(PHP_OS=="Linux")
             {
                $clear = exec("clear");
                print($clear);
              }
            else
            exec("cls");
            echo "test_".$i."\n";
        
            sleep(1);
            $i++;
        }
        

        这个对我有用,也经过测试。

        【讨论】:

        • 我在 Windows 上尝试了您的第二个解决方案,但它不起作用。但是谢谢!
        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 2015-08-16
        • 2020-08-11
        • 2013-06-09
        • 2013-08-14
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多