2 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
$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服務(wù)器)
(基于putty設(shè)置,Windows默認(rèn)固定為80,我將其更改為120):
admin@testserver:/var/www/html/dev/$ php test.php
Terminal Width: 120
讀者:請隨時(shí)添加有關(guān)在其他平臺獲取此數(shù)據(jù)的注釋。將融入答案。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
有一個(gè)$_SERVER可通過 PHP CLI 訪問的數(shù)組(使用 PHP 7.4 進(jìn)行測試);盡管它不會包含任何與 HTTP 服務(wù)器相關(guān)的變量。其余部分將根據(jù)您的環(huán)境而有很大差異。我查看了 Windows 10 上可用的內(nèi)容,包括命令提示符和 CygWin,以及 Centos 7。沒有一個(gè)包含客戶端大小或其他窗口系統(tǒng)信息。(對于基于 HTTP 的 PHP 來說也是如此;您需要 Javascript 來獲取用戶代理大小。)
作為參考,如果您在終端中運(yùn)行php -i,您將在最后看到可用服務(wù)器和環(huán)境變量的完整列表。但正如我所指出的,用戶代理大小不是這些變量之一。(也許有一個(gè)用戶代理可以輸入尺寸;我不知道?。?/p>
我們必須在這里做點(diǎn)別的事情,即。運(yùn)行 shell 命令并查詢底層平臺的信息。首先,一個(gè)堅(jiān)韌的“老派”解決方案(在 CMD 和 PS 中都有效):
// Using PHP as CLI on Windows.
$info = shell_exec('MODE');
運(yùn)行MODE不帶參數(shù)的命令會得到類似以下輸出:
Status for device CON:
----------------------
Lines: 9001
Columns: 120
Keyboard rate: 31
Keyboard delay: 1
Code page: 65001
“列”行以字符為單位說明窗口寬度。(注意:此輸出是特定于語言環(huán)境的。您可能會得到“Columnas”或“Oszlopok”等)然后讓我們解析該數(shù)字:
preg_match('~Columns:\s+(\d+)~', $info, $match);
$columns = $match[1] ?? null;
如果數(shù)據(jù)可用,該$columns變量將包含當(dāng)前命令提示符終端的字符寬度。如果沒有,請?jiān)O(shè)置默認(rèn)寬度(此處簡單為“null”)。
該解決方案僅適用于 Windows 命令提示符和 Power Shell 上的 PHP CLI;或支持該MODE命令的其他(大概是 Microsoft)終端應(yīng)用程序。
如果可以選擇調(diào)用 PowerShell,還有一種更簡潔的替代方法來獲取列寬。列大小/字符寬度存儲在 PS$Host對象中:
// Returns the number of columns:
$columns = shell_exec('powershell $Host.UI.RawUI.WindowSize.Width');
對于其他平臺,您必須找到等效的命令。在bash中,等效項(xiàng)是tput cols(返回列數(shù))。如下:
$columns = shell_exec('tput cols');
此 bash 命令也適用于 MacOS 和 CygWin(均經(jīng)過測試)。夠簡單的!
讀者:請隨時(shí)添加有關(guān)在其他平臺獲取此數(shù)據(jù)的注釋。將融入答案。
- 2 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報(bào)