PHP処理系のバージョンを調べる

(1/1)
PHPのバージョンは「各バージョンのサポート期限」で紹介したとおりだが、バージョンによって使える関数や機能が異なることがある。
そこで今回は、プログラムの冒頭で、あらかじめ指定したバージョンの範囲になければプログラムを強制終了するプログラムを紹介する。あわせて、可変長引数リストやデフォルト引数値について学ぶ。

サンプル・プログラムの実行例

PHP処理系のバージョンを調べる

目次

サンプル・プログラム

圧縮ファイルの内容
exitVersion.phpサンプル・プログラム本体。
exitVersion.php 更新履歴
バージョン 更新日 内容
1.0.0 2024/01/28 初版

解説:指定した関数を実行し,その戻り値を返す

  73: /**
  74:  * 指定した関数を実行し,その戻り値を返す.
  75:  * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php13-01.shtm
  76:  * phpversion関数が実装されていなければ強制終了する.
  77:  * @param   string $func 実行する関数
  78:  * @return  mixed 戻り値
  79: */
  80: function execFunc($func, ...$vars) {
  81:     if (function_exists($func) === FALSE) {
  82:         echo 'Sorry, this program requires ' . $func . ' function to work.';
  83:         exit(1);
  84:     }
  85:     return $func(...$vars);
  86: }

PHPのバージョンを文字列として返す組み込み関数  phpversion  がある。PHP4~8に備わっているコア関数なので、これが利用できないことは無いと思うが、念には念を入れ、phpversion が存在しなければ、プログラムを強制終了するようにした。
そのために用意したのがユーザー関数 execFunc である。

まず関数が存在するかどうかを調べる組み込み関数  function_exists  を実行する。戻り値が FALSE:blue] なら、その関数はないという意味なので、メッセージを表示して強制終了  exit  する。

関数が存在すれば、その関数 $func を実行する。
PHPでは、関数名を代入した変数(ここでは $func)を指定して、関数を実行することができる。$func() のように書く。
さらにPHPでは、引数の個数を可変指定することができる。これを可変長引数リストと呼び、(...$vars) のように書く。たとえば、引数は ($var1) と1個だけでもいいし、($var1, $var2) や ($var1, $var2, $var3) のように2個でも3個でもいい。
引数は、配列 $vars の要素として代入されている。
ここでは、可変長引数リストをそのまま関数 $func() に渡し、その戻り値を返すようにした。

解説:指定したバージョン未満ならメッセージを表示して強制終了

  88: /**
  89:  * PHP処理系が指定したバージョン未満ならメッセージを表示して強制終了する.
  90:  * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php13-01.shtm
  91:  * @param   string $version 基準バージョン(デフォルト値 8.0.0)
  92:  * @return  bool TRUE:PHP5以上/FALSE:PHP5未満
  93: */
  94: function exitIfLessVersion($version='8.0.0') {
  95:     //PHP処理系のバージョンを取得する.
  96:     $phpver = execFunc('phpversion');
  97:     //PHP処理系のバージョンを比較する.
  98:     if (execFunc('version_compare', $phpver, $version, '<')) {
  99:         echo 'Sorry, this program requires PHP version higher than ' . $version . ' to work.';
 100:         exit(1);
 101:     }
 102: }

ユーザー関数 exitIfLessVersion は、PHP処理系が指定したバージョン未満ならメッセージを表示して強制終了する。

前述のユーザー関数 execFunc を使って、組み込み関数 [phpversion:phpo_function] を呼び出し、PHP処理系のバージョンを変数 $phpver に代入する。

次に、ユーザー関数 execFunc を使って、組み込み関数 [version_compare:phpo_function] を呼び出し、バージョンの比較を行う。指定したバージョン未満ならメッセージを表示して強制終了する。

ここで、ユーザー関数 exitIfLessVersion の引数が ($version='8.0.0') となっていることに留意されたい。これは、引数 $version を省略したときに、自動的に '8.0.0' が代入されるデフォルト引数値という機能である。

解説:指定したバージョンを超えたらメッセージを表示して強制終了

 104: /**
 105:  * PHP処理系が指定したバージョンを超えたらメッセージを表示して強制終了する.
 106:  * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php13-01.shtm
 107:  * @param   string $version 基準バージョン(デフォルト値 8.0.0)
 108:  * @return  bool TRUE:PHP5以上/FALSE:PHP5未満
 109: */
 110: function exitIfExceedVersion($version='8.1.0') {
 111:     //PHP処理系のバージョンを取得する.
 112:     $phpver = execFunc('phpversion');
 113:     //PHP処理系のバージョンを比較する.
 114:     if (execFunc('version_compare', $phpver, $version, '>')) {
 115:         echo 'Sorry, this program requires PHP version less than ' . $version . ' to work.';
 116:         exit(1);
 117:     }
 118: }

ユーザー関数 exitIfExceedVersion は、PHP処理系が指定したバージョンを超えたらメッセージを表示して強制終了する。流れは、先ほどのユーザー関数 exitIfLessVersion とほぼ同じである。

解説:メインプログラム

  15: //動作するPHPバージョンの範囲
  16: define('MINUMUM_VERSION', '5.0.0');
  17: define('MAXIMUM_VERSION', '8.5.0');
  18: 

 120: /**
 121:  * HTML BODYを作成する
 122:  * @param   なし
 123:  * @return  string HTML BODY
 124: */
 125: function makeCommonBody() {
 126:     $refere = REFERENCE;
 127:     $title  = TITLE;
 128:     $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
 129:     $width  = WIDTH;
 130: 
 131:     //PHPのバージョン
 132:     $phpver = execFunc('phpversion');
 133: 
 134:     $body =<<< EOT
 135: <body>
 136: <h2>{$title} {$version}</h2>
 137: <p>PHPバージョン {$phpver}</p>
 138: 
 139: <div style="border-style:solid; border-width:1px; margin:20px 0px 0px 0px; padding:5px; width:{$width}px; font-size:small; overflow-wrap:break-word; word-break:break-all;">
 140: ※参考サイト:<a href="{$refere}">{$refere}</a>
 141: </div>
 142: </body>
 143: 
 144: EOT;
 145:     return $body;
 146: }

 148: // メイン・プログラム =======================================================
 149: //PHPバージョン・チェック
 150: exitIfLessVersion(MINUMUM_VERSION);
 151: exitIfExceedVersion(MAXIMUM_VERSION);
 152: 
 153: //表示HTML作成
 154: $HtmlBody = makeCommonBody();
 155: 
 156: //画面に表示する.
 157: echo $HtmlHeader;
 158: echo $HtmlBody;
 159: echo $HtmlFooter;

メイン・プログラム冒頭で、上述のユーザー関数を使ってPHP処理系が指定した範囲(定数 MINUMUM_VERSIONMAXIMUM_VERSION)にあることをチェックし、画面にバージョンを表示する。

参考サイト

(この項おわり)
header