[英]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(均已测试)。 够简单!
读者:请随时添加有关在其他平台上获取此数据的说明。 将整合到答案中。
$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.