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
讀者:請隨時添加有關在其他平臺獲取此數據的注釋。將融入答案。

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(均經過測試)。夠簡單的!
讀者:請隨時添加有關在其他平臺獲取此數據的注釋。將融入答案。
- 2 回答
- 0 關注
- 141 瀏覽
添加回答
舉報