PHP - 如何读取 ANSI 转义码 CSI 6n

3
我该如何使用PHP读取ANSI转义码CSI 6n的结果?
(DSR - 设备状态报告:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes
<?php
fwrite(STDOUT, "\033[6n");
$code = fread(STDIN,1);
die($code);

这段代码将执行CSI 6n,但我无法捕获响应,当php退出时它总是被打印出来。

1个回答

0

你必须做一些准备来读取未缓冲的输入。这里是一个例子:

<?php
$term = trim(`stty -g`);
system("stty -icanon -echo");
fwrite(STDOUT, "\033[6n");
$code = trim (fread(STDIN,100) );
system("stty '" . $term . "'");
if ( sscanf($code, "\033[%d;%dR", $row, $col) == 2 ) {
    printf ("position %d,%d\n", $row, $col );
} elseif ( strlen ($code ) > 0 ) {
    printf ("unexpected %d-byte reply\n", strlen ($code ));
}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接