PHP で、シェル/ターミナル/コマンドラインの画面の横幅や高さを取得するサンプルです。
「シェルで<HR>
(水平線)を表現する方法各種」を活用して、PHP で CLI アプリを作成する際に画面サイズ(1行の文字数と画面の行数)を取得できるようになります。
これにより画面横幅いっぱいの横線を描画したりできます。
TL;DR(ポイント)
シェルの tput
コマンドを PHP でパース(PHP 内から実行して、その結果を取得)します。
<?php
$screen_width_default = 70;
$screen_width_system = `tput cols`; // バッククォート注意。`exec` だと正常に取得できない
$screen_width = $screen_width_system ?: $screen_width_default;
echo srt_repeat('-', $screen_width), PHP_EOL;
TS;DR
サンプルで使われているユーザ関数
関数名 | 内容 | 備考 |
---|---|---|
get_hr() |
指定文字の罫線(1行ぶん繰り返した文字列)を返す | 罫線の文字のデフォルトは'=' |
get_screen_width() |
スクリーンの横幅(1行の文字数)を返す | 取得できない場合はデフォルト値を返します |
get_screen_height() |
スクリーンの高さ(画面の行数)を返す | 取得できない場合はデフォルト値を返します |
is_cli() |
CLI で実行しているか返す | 呼び出し元がWEBサーバーの場合はfalse を返します |
サンプル・コード
sample_cli.php
<?php
/* サンプル */
echo get_hr() . PHP_EOL; //画面横幅いっぱいに横線を描画する
echo get_screen_width() . PHP_EOL; //ターミナルの横幅(1行の文字数)を出力
echo get_screen_height() . PHP_EOL; //ターミナルの高さ(画面の行数)を出力
echo (is_cli()) ? 'CLIです' . PHP_EOL : '<p>CLIではありません</p>' . PHP_EOL; //CLIの判断
/* 関数 */
function get_hr($hr_char = '=')
{
$width = get_screen_width();
if ('n/a' == $width) {
return '<hr />';
} else {
return str_repeat($hr_char, $width);
}
}
function get_screen_width()
{
$default_width = 70; //デフォルト幅
if (! is_cli()) {
return 'n/a';
}
$width = trim(`tput cols`); //バッククォートであることに注意
return is_numeric($width) ? (int) $width : $default_width;
}
function get_screen_height()
{
$default_height = 40; //デフォルト幅
if (! is_cli()) {
return 'n/a';
}
$height= trim(`tput lines`); //バッククォートであることに注意
return is_numeric($height) ? $height : $default_height;
}
function is_cli()
{
return PHP_SAPI === 'cli' || empty($_SERVER['REMOTE_ADDR']);
}
出力結果
$ php ./sample_cli.php
================================================================================
86
24
CLIです
- 1行目:WEBからのアクセスの場合は "
<hr />
" が返されます - 2行目:CLI からのアクセスの場合で幅を取得できた場合の横幅(1行の長さ)の値
- 3行目:CLI からのアクセスの場合で高さを取得できた場合の高さ(画面の行数)の値
- 4行目:CLI 経由での実行か否かの結果
検証済み環境
- macOS HighSierra: OSX 10.13.6
-
bash --version
: GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17) -
php -v
: PHP 7.2.6 (cli) (built: May 25 2018 06:18:43) ( NTS )