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
读者:请随时添加有关在其他平台获取此数据的注释。将融入答案。

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(均经过测试)。够简单的!
读者:请随时添加有关在其他平台获取此数据的注释。将融入答案。
- 2 回答
- 0 关注
- 123 浏览
添加回答
举报