У меня есть простой скрипт 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++; }
Это работало и для меня, и для тестирования.