Очистить CMD-оболочку с php

У меня есть простой скрипт php, который выводит строку каждую секунду.

<?php $i = 1; while(1) { exec("cls"); //<- Does not work echo "test_".$i."\n"; sleep(1); $i++; } 

Я php myscript.php скрипт в командной оболочке на windows ( php myscript.php ) и пытаюсь очистить оболочку команд перед каждым циклом. Но я не работаю. Есть идеи?

Как насчет этого?

 <?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++; } в <?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, и вместо того, чтобы заканчивать каждое эхо с новой строкой, она перемещает указатель обратно к существующей строке и записывает поверх нее.

По-видимому, вам нужно сохранить вывод переменной, а затем print ее, чтобы она успешно очистила экран:

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

Все вместе:

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

Я тестировал его на Linux с clear вместо cls (эквивалентная команда), и он работал нормально.

Дубликат этого вопроса

В Windows нет такой вещи, как

 @exec('cls'); 

Сожалею! Все, что вы могли бы сделать, это поиск исполняемого файла (а не встроенной команды cmd), как здесь …

можете ли вы проверить это решение?

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

Вы должны распечатать вывод на терминал:

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

если это сервер linux, используйте следующую команду ( clear ), если это серверный сервер, использующий cls я надеюсь, что он будет работать

 $i = 1; while(1) { exec("clear"); //<- This will work echo "test_".$i."\n"; sleep(1); $i++; } в $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++; } в <?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++; } 

Это работало и для меня, и для тестирования.