我有这个简单的php脚本,每秒输出一个字符串。
<?php
$i = 1;
while(1)
{
exec("cls"); //<- Does not work
echo "test_".$i."\n";
sleep(1);
$i++;
}
我在windows(php myscript.php
)上的命令shell中执行脚本,并尝试在每个周期之前清除命令shell。但是我没有让它发挥作用。有什么想法吗?
答案 0 :(得分:3)
这个怎么样?
<?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
循环之外执行,而不是用新行结束每个回显,它将指针移回现有行,并在其顶部写入。
答案 1 :(得分:2)
你可以检查一下这个解决方案吗
$i = 1;
echo PHP_OS;
while(1)
{
if(PHP_OS=="Linux")
{
system('clear');
}
else
system('cls');
echo "test_".$i."\n";
sleep(1);
$i++;
}
答案 2 :(得分:1)
显然,您必须存储变量的输出,然后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
(等效命令)对其进行了测试,并且运行正常。
答案 3 :(得分:1)
答案 4 :(得分:0)
您必须将输出打印到终端:
<?php
$i = 1;
while(1)
{
exec("cls", $clearOutput);
foreach($clearOutput as $cleanLine)
{
echo $cleanLine;
}
echo "test_".$i."\n";
sleep(1);
$i++;
}
答案 5 :(得分:0)
如果是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++;
}
这个对我有用,也经过测试。