2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP の CLI でスクリーンの横幅と高さを取得するサンプル(罫線を引く)

Last updated at Posted at 2018-01-27

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 )
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?