繁体   English   中英

在 Windows 平台上使用 PHP CLI 获取终端布局

[英]Get terminal layout with PHP CLI on Windows platform

我正在使用 XAMPP 和 Windows 并且我正在从终端(cmder 或 CMD 或 Power Shell)运行一些测试文件。

但我需要知道终端布局设置。 行宽; 创建适合终端列布局的框架盒或抽屉盒。

我运行它来获取全局变量但什么也没得到:

echo var_dump($_SERVER);

如何从服务器端获取这些信息?

可以通过 PHP CLI 访问$_SERVER数组(使用 PHP 7.4 进行测试); 虽然它不包含任何 HTTP 服务器相关变量。 其余部分将根据您的环境而有很大差异。 我查看了 Windows 10 上可用的内容,包括命令提示符和 CygWin,以及 Centos 7。没有包括客户端大小或其他窗口系统信息。 (PHP 超过 HTTP 也是如此;您需要 Javascript 来获取用户代理大小。)

作为参考,如果您在终端中运行php -i ,您将在最后看到可用服务器和环境变量的完整列表。 但正如我所指出的,用户代理大小不是这些变量之一。 (也许那里有一个输入大小的用户代理;我不知道!)

我们将不得不在这里做其他事情,即。 运行 shell 命令并查询底层平台的信息。 首先,一个坚韧不拔的“老派”解决方案(适用于 CMD 和 PS):

// Using PHP as CLI on Windows.
$info = shell_exec('MODE');

在没有 arguments 的情况下运行MODE命令会得到类似于以下 output 的内容:

Status for device CON:
----------------------
    Lines:          9001
    Columns:        120
    Keyboard rate:  31
    Keyboard delay: 1
    Code page:      65001

“列”行以字符表示 window 宽度。 (注意:这个 output 是特定于语言环境的。您可能会得到“Columnas”或“Oszlopok”等)然后让我们解析数字:

preg_match('~Columns:\s+(\d+)~', $info, $match);
$columns = $match[1] ?? null;

如果数据可用, $columns变量将包含当前命令提示符终端的字符宽度。 如果没有,请改为设置默认宽度(这里只是“null”)。

此解决方案仅适用于 Windows 命令提示和电源 Shell 上的 PHP CLI; 或支持MODE命令的其他(可能是 Microsoft)终端应用程序。

如果可以选择调用 PowerShell ,还有一种更简洁的方法来获取列宽。 列大小/字符宽度存储在 PS $Host object 中:

// Returns the number of columns:
$columns = shell_exec('powershell $Host.UI.RawUI.WindowSize.Width');

对于其他平台,您必须找到等效的命令。 bash中,等价的将是tput cols (返回列数)。 如下:

$columns = shell_exec('tput cols');

此 bash 命令也适用于 MacOS 和 CygWin(均已测试)。 够简单!
读者:请随时添加有关在其他平台上获取此数据的说明。 将整合到答案中。

基于: markus-ao答案和这个答案

$info = shell_exec('MODE 2> null') ?? shell_exec('tput cols');
if (strlen($info) > 5) {
    preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', $info, $match);
    $info = $match['cols'] ?? 80;
}
echo 'Terminal Width: '. $info;

cmder中的output(基于windows大小)(windows 10):

C:\xampp\htdocs\dev\avi3\dev
λ php test.php
Terminal Width: 75

PowerShell 中的 output(基于 windows 大小)(Windows 10):

PS C:\xampp\htdocs\dev\avi3\dev> php test.php
Terminal Width: 95

output 从腻子(在 windows 10 中)连接到(Ubuntu 20.04 服务器)
(基于腻子设置 windows 默认固定为 80 我将其更改为 120):

admin@testserver:/var/www/html/dev/$ php test.php
Terminal Width: 120

读者:请随时添加有关在其他平台上获取此数据的说明。 将整合到答案中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM