PHP - 如何阅读 ANSI 转义码 CSI 6n
PHP - How to read ANSI escape code CSI 6n
如何使用 PHP 读取 ANSI 转义码 CSI 6n 的结果?
(DSR – 设备状态报告:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes)
<?php
fwrite(STDOUT, "3[6n");
$code = fread(STDIN,1);
die($code);
此代码将执行 CSI 6n,但我无法捕获响应,它总是会在 php 退出时打印出来。
您必须为读取无缓冲输入做一些准备。这是一个例子:
<?php
$term = trim(`stty -g`);
system("stty -icanon -echo");
fwrite(STDOUT, "3[6n");
$code = trim (fread(STDIN,100) );
system("stty '" . $term . "'");
if ( sscanf($code, "3[%d;%dR", $row, $col) == 2 ) {
printf ("position %d,%d\n", $row, $col );
} elseif ( strlen ($code ) > 0 ) {
printf ("unexpected %d-byte reply\n", strlen ($code ));
}
?>
如何使用 PHP 读取 ANSI 转义码 CSI 6n 的结果?
(DSR – 设备状态报告:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes)
<?php
fwrite(STDOUT, "3[6n");
$code = fread(STDIN,1);
die($code);
此代码将执行 CSI 6n,但我无法捕获响应,它总是会在 php 退出时打印出来。
您必须为读取无缓冲输入做一些准备。这是一个例子:
<?php
$term = trim(`stty -g`);
system("stty -icanon -echo");
fwrite(STDOUT, "3[6n");
$code = trim (fread(STDIN,100) );
system("stty '" . $term . "'");
if ( sscanf($code, "3[%d;%dR", $row, $col) == 2 ) {
printf ("position %d,%d\n", $row, $col );
} elseif ( strlen ($code ) > 0 ) {
printf ("unexpected %d-byte reply\n", strlen ($code ));
}
?>