我现在正在Windows上使用PHP CLI编写一些小型桌面命令行应用程序。
我想知道是否以及如何可能:
清除屏幕(cls将是正常的命令,但exec()将无法使用它)
更改颜色,更改输出部分的颜色(之前在程序中看到)
使命令行横向变大 - 事情很快变得不可读
PHP脚本中是否有以上任何一种可能?
在Windows上,在标准CLI提示符中,您无法以彩色输出(如Spudley的答案)。
您可以通过右键单击命令窗口的标题栏并选择"属性",然后在"布局"选项卡中修改值,以用户身份更改窗口大小。我认为不可能在PHP中修改CLI的宽度。
您可以使用我在此处编写的函数在Windows上检查CLI窗口的宽度
有关使用命令行的信息,请参阅PHP手册页
要直接回答每个要点:
该页面上有一个注释,它提供了一个可以清除屏幕的功能。我会在这里为你引用:
function clearscreen($out = TRUE) {
$clearscreen = chr(27)."[H".chr(27)."[2J";
if ($out) print $clearscreen;
else return $clearscreen;
}
?>
还有另一条评论解释了如何改变颜色。我再说一遍:
echo"\033[31m".$myvar; // red foreground
echo"\033[41m".$myvar; // red background
?>
并重置:
echo"\033[0m";
?>
您应该阅读该页面的其余部分,以获取有关如何操作CLI的更多建议。
你问题中唯一没有答案的部分是第三点。遗憾的是,我不相信你能做到这一点,我认为不可能横向调整Windows命令行窗口的大小。
希望有所帮助。
提供的代码在Windows下无法运行,因为Windows下的PHP会对命令窗口执行某些操作。我不确定PHP做了什么,但我写了一个简单的Freebasic程序只有两行:
cls
end
然后我编译它并在常规命令行窗口下运行它。它清除屏幕没有任何问题。然后我在PHP中执行以下操作:
echo"This is a test
";
system("cls.exe" );
exec("cls.exe" );
passthru("cls.exe" );
?>
当我运行该程序时,它只做了"这是一个测试"行。因此,PHP会发生某种抑制,它会查找并阻止任何类型的转义序列的发生。在PHP中修复此问题之前 - 您将永远无法执行cls,也无法使用curses,ncurses或任何其他库。必须要做的是将FreeBasic的窗口方法集成为某种类(或者只是一组C例程),这些类将通过THAT语言的方法打开一个新窗口并使用它们来执行文本窗口。然后所有的转义序列都可以工作。在那之前 - 他们不会。
我觉得奇怪的是,PHP最初是用Perl编写的,而Perl将在Windows上进行ncurses而没有任何问题。 Perl还允许所有转义序列工作。所以在Windows编译中只有一些事情正在导致这个问题。
至于第三个问题,我建议你使用控制台2的默认命令行。它是一个很好的替代品,不仅可以让你使用你喜欢的任何宽度(只要它适合你的屏幕),而且还支持命令历史记录,标签和一些UI糖。
我用PHP创建了一个小的备份脚本,从我记忆中,你可以打印退格字符来删除内容。虽然不是很理想。
只是google'd:http://www.php.net/manual/en/features.commandline.php#77142