Часто ли нужно сделать програму для консоли? Не так часто, да? А вот я последнее время только этим и занимаюсь… Поэтому сделал класс (на самом деле сделал еще очень давно).
Этот класс позволяет выполнять такие простые операции, как подсветка текста, подсветка бэкграунда буквы или текста,установка курсора на нужную позицию, выбор консоли для вывода (1~8) и прямой граб нажатых клавиш.
<?php class console { const TARGET_OUTPUT = "php://output"; const TARGET_STDOUT = "php://stdout"; const TARGET_STDERR = "php://stderr"; const TARGET_STDIN = "php://stdin"; protected static $color = array( 'gray' => 30, 'black' => 30, 'red' => 31, 'green' => 32, 'yellow' => 33, 'blue' => 34, 'magenta' => 35, 'cyan' => 36, 'white' => 37, 'default' => 39 ); protected static $bgcolor = array( 'gray' => 40, 'black' => 40, 'red' => 41, 'green' => 42, 'yellow' => 43, 'blue' => 44, 'magenta' => 45, 'cyan' => 46, 'white' => 47, 'default' => 49, ); protected static $style = array( 'default' => '0', 'bold' => 1, 'faint' => 2, 'normal' => 22, 'italic' => 3, 'notitalic' => 23, 'underlined' => 4, 'doubleunderlined' => 21, 'notunderlined' => 24, 'blink' => 5, 'blinkfast' => 6, 'noblink' => 25, 'negative' => 7, 'positive' => 27, ); private $text = ""; // Outputing public function draw($text='') { echo $this->text.$text; $this->text = ''; return $this; } // Input public function readNumeric() { $stdin = fopen('php://stdin', 'r'); $line = trim(fgets($stdin)); fscanf($stdin, "%d\n", $number); return $number; } public function readString() { $stdin = fopen('php://stdin', 'r'); $line = trim(fgets($stdin)); fscanf($stdin, "%s\n", $string); return $string; } // Sound public function beep() { echo "\007"; return $this; } public function setSoundHerz($herz=100) { echo "\033[10;{$herz}]"; return $this; } public function setSoundLong($milliseconds=500) { echo "'033[11;{$milliseconds}]"; return $this; } // Cursor position public function toPos( $row = 1, $column = 1 ) { echo "\033[{$row};{$column}H"; return $this; } public function cursorUp($lines=1) { echo "\033[{$lines}A"; return $this; } public function cursorDown($lines=1) { echo "\033[{$lines}B"; return $this; } public function cursorRight($columns=1) { echo "\033[{$columns}C"; return $this; } public function cursorLeft($columns=1) { echo "\033[{$columns}D"; return $this; } // Text colors public function setStyle($style='default') { $this->text .= "\033[".$this->style[$style]."m"; return $this; } public function setColor($color='default') { $this->text .= "\033[".$this->color[$style]; return $this; } public function setBgColor($color='default') { $this->text .= "\033[".$this->bgcolor[$style]; return $this; } // Application public function setAppName($name='') { echo "\033]0;{$name}\007"; return $this; } public function setTitle($name='') { echo "\033]2;{$name}\007"; return $this; } public function setIcon($name='') { echo "\033]1;{$name}\007"; return $this; } // Other public function clear() { echo "\033c"; return $this; } public function console($num=1) { echo "\033[12;{$num}]"; return $this; } } ?>
Так же скачать это можно с phpclasses.org по этой ссылке: http://www.phpclasses.org/browse/package/4969.html
Спасибо за внимание.





surger
20 Ноя, 2008
Даже ностальгия по терминалам пробила…
Спасиба, камрад
Alex Snet
20 Ноя, 2008
Всегда рад помочь! =)
wtask
16 Дек, 2008
спасибо, посмотрим. периодически требуются консольные скриптики.
Emilis
02 Янв, 2009
Может быть у вас ест и пример как использовать этот класс?
Alex Snet
02 Янв, 2009
Да, разумеется. А что именно Вам непонятно?
Pepe
20 Мар, 2009
Hi
Do you have an example how to use this class?
Thanks.
Pepe
Val
29 Окт, 2009
Добрый день; а вы не пробовали использовать этот класс под windows?
Alex Snet
03 Ноя, 2009
Нет, не пробовал. Честно говоря, я сомневаюсь что под виндовс пойдут консольные ASCII команды.
Val
03 Ноя, 2009
Правильно сомневаетесь — не работают консольные команды из пхп на винде.
Так, очистить экран из пхп я смог только путём вызова соответствующего метода из dllины.
Что само поразительное, в питоне под ту же самую винду работает subprocess.call(['cmd', '/c', 'cls'])
А в пхп – нет.
Alex Snet
04 Ноя, 2009
Val, вы все таки несколько путаете. В данном коде нет вызова других приложений. Здесь мы просто печатаем спецсимволы, которые выполняют ту или иную операцию.
Насчет вызова консольных приложений – у php есть много вариантов как это делается. К примеру: exec, shell_exec, system, etc…
Поэтому вполне возможно что с одной командой работать не будет, а с другой вполне.
Val
04 Ноя, 2009
Alex, я методично перебрал все эти функции в php и все способы “по-простому” вызвать cls: и command /c cls, и cmd /c cls, и напрямую печатать chr(27), “[H”, chr(27), “[2J” и вообще всё.
Не работают. Т.е. вообще — они выдают на консоль правильные ASCII команды, и я могу их наблюдать: ←[2J, ♀
Интернет осчастливил меня следующим: “Windows NT does not support ANSI.SYS escape sequences in Win32 Console applications”
php.exe — очевидно win32 console app, поэтому не работает.
Вопрос в том, почему в python.exe работает.