为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕婉清6462132 2023-10-15 17:31:20
我正在使用 XAMPP 和 Windows,并从终端(cmder 或 CMD 或 Power Shell)运行一些测试文件。但我需要知道终端布局设置。行宽; 创建适合端子列布局的框架盒或抽屉盒。我运行它来获取全局变量但什么也没得到:echo var_dump($_SERVER);我如何从服务器端获取这些信息?
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

$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 中的输出(基于 Windows 大小)(Windows 10):


C:\xampp\htdocs\dev\avi3\dev

λ php test.php

Terminal Width: 75

PowerShell 中的输出(基于 Windows 大小)(Windows 10):


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

Terminal Width: 95

从putty(在Windows 10中)输出连接到(Ubuntu 20.04服务器)

(基于putty设置,Windows默认固定为80,我将其更改为120):


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

Terminal Width: 120

读者:请随时添加有关在其他平台获取此数据的注释。将融入答案。


查看完整回答
反对 回复 2023-10-15
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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


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


我们必须在这里做点别的事情,即。运行 shell 命令并查询底层平台的信息。首先,一个坚韧的“老派”解决方案(在 CMD 和 PS 中都有效):


// Using PHP as CLI on Windows.

$info = shell_exec('MODE');

运行MODE不带参数的命令会得到类似以下输出:


Status for device CON:

----------------------

    Lines:          9001

    Columns:        120

    Keyboard rate:  31

    Keyboard delay: 1

    Code page:      65001

“列”行以字符为单位说明窗口宽度。(注意:此输出是特定于语言环境的。您可能会得到“Columnas”或“Oszlopok”等)然后让我们解析该数字:


preg_match('~Columns:\s+(\d+)~', $info, $match);

$columns = $match[1] ?? null;

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


该解决方案仅适用于 Windows 命令提示符和 Power Shell 上的 PHP CLI;或支持该MODE命令的其他(大概是 Microsoft)终端应用程序。


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


// 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(均经过测试)。够简单的!

读者:请随时添加有关在其他平台获取此数据的注释。将融入答案。


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号