亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 大?。╓indows 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,您將在最后看到可用服務器和環境變量的完整列表。但正如我所指出的,用戶代理大小不是這些變量之一。(也許有一個用戶代理可以輸入尺寸;我不知道?。?/p>


我們必須在這里做點別的事情,即。運行 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 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號