PHP
ターミナル
cli

PHP の CLI アプリケーションでスクリーンの横幅と高さを取得するサンプル

PHP で、シェル/ターミナル/コマンドの画面の横幅や高さを取得するサンプルです。

シェルで<HR>(水平線)を表現する方法各種」を活用して、PHP で CLI アプリを作成する際に画面サイズ(1行の文字数と画面の行数)を取得できるようになります。

ポイント

シェルの tput コマンドを PHP でパース(PHP 内から実行して、その結果を取得)します。

サンプルで使われているユーザ関数

関数名 内容 備考
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) ? $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
================================================================================
80
24
CLIです
  • WEBからのアクセスの場合は "<hr />" が返されます
  • CLI からのアクセスの場合で幅を取得できなかった場合はデフォルト値(70)の幅のテキスト罫線
  • CLI からのアクセスの場合で幅を取得出来た場合は横幅いっぱいのテキスト罫線
  • CLI 経由での実行か否か