はじめに
PHPアプリケーションを開発していると、「このコードは現在のPHPバージョンで動作するのか?」「特定の拡張機能のバージョンは?」といった疑問に直面することがありますよね。
バージョン互換性の確認は、特に以下のような場面で重要です:
- 新しいPHP機能を使う前のバージョンチェック
- 本番環境と開発環境のバージョン差異の確認
- 拡張機能の動作確認
- セキュリティパッチの適用確認
そんな時に活躍するのが**phpversion関数**です。この関数を使えば、PHPのバージョン情報や拡張機能のバージョンを簡単に取得できます。
この記事では、phpversionの基本から実践的な活用方法まで、詳しく解説します。
phpversionとは?
phpversionは、現在実行中のPHPのバージョン情報、または特定の拡張機能のバージョンを返す関数です。
基本構文
phpversion(?string $extension = null): string|false
パラメータ
- $extension (オプション): 拡張機能の名前
- 指定しない場合: PHPのバージョンを返す
- 指定した場合: その拡張機能のバージョンを返す
戻り値
- 成功時: バージョン文字列(例: “8.2.10”)
- 失敗時:
false(拡張機能が存在しない場合)
対応バージョン
- PHP 4.0.0 以降で使用可能
- 拡張機能のバージョン取得は全バージョンで利用可能
基本的な使い方
PHPバージョンの取得
<?php
// 方法1: phpversion()関数
$version = phpversion();
echo "PHPバージョン: {$version}\n";
// 方法2: PHP_VERSION定数(推奨)
echo "PHPバージョン: " . PHP_VERSION . "\n";
// 出力例:
// PHPバージョン: 8.2.10
?>
拡張機能のバージョン取得
<?php
// MySQLi拡張機能のバージョン
$mysqli_version = phpversion('mysqli');
if ($mysqli_version) {
echo "MySQLi: {$mysqli_version}\n";
} else {
echo "MySQLi拡張機能はインストールされていません\n";
}
// PDO拡張機能のバージョン
$pdo_version = phpversion('pdo');
if ($pdo_version) {
echo "PDO: {$pdo_version}\n";
}
// 出力例:
// MySQLi: 8.2.10
// PDO: 8.2.10
?>
バージョン番号の比較
<?php
// バージョンチェック
if (version_compare(phpversion(), '8.0.0', '>=')) {
echo "PHP 8.0以降が利用可能です\n";
// PHP 8の機能を使用可能
} else {
echo "PHP 8.0未満です\n";
// 古いバージョン用の処理
}
?>
実践的な使用例
例1: 環境情報の表示
<?php
function displayEnvironmentInfo() {
echo "=== PHP環境情報 ===\n\n";
// PHPバージョン
echo "PHPバージョン: " . phpversion() . "\n";
echo "PHP_VERSION: " . PHP_VERSION . "\n";
echo "PHP_VERSION_ID: " . PHP_VERSION_ID . "\n";
// メジャー・マイナー・リリースバージョン
echo "\nバージョン詳細:\n";
echo " メジャー: " . PHP_MAJOR_VERSION . "\n";
echo " マイナー: " . PHP_MINOR_VERSION . "\n";
echo " リリース: " . PHP_RELEASE_VERSION . "\n";
// 追加情報
echo "\nその他:\n";
echo " SAPI: " . PHP_SAPI . "\n";
echo " OS: " . PHP_OS . "\n";
echo " OS Family: " . PHP_OS_FAMILY . "\n";
}
displayEnvironmentInfo();
?>
例2: 拡張機能の一覧とバージョン
<?php
function listExtensionsWithVersions() {
$extensions = get_loaded_extensions();
sort($extensions);
echo "=== インストール済み拡張機能 ===\n\n";
echo sprintf("%-25s %s\n", "拡張機能名", "バージョン");
echo str_repeat("-", 50) . "\n";
foreach ($extensions as $ext) {
$version = phpversion($ext);
$version_str = $version ? $version : '(不明)';
echo sprintf("%-25s %s\n", $ext, $version_str);
}
echo "\n総数: " . count($extensions) . "個\n";
}
listExtensionsWithVersions();
?>
例3: バージョン互換性チェッカー
<?php
class VersionChecker {
private $requirements = [];
public function requirePHP($min_version, $max_version = null) {
$this->requirements['php'] = [
'min' => $min_version,
'max' => $max_version,
'current' => phpversion()
];
return $this;
}
public function requireExtension($extension, $min_version = null) {
$current = phpversion($extension);
$this->requirements['ext_' . $extension] = [
'name' => $extension,
'min' => $min_version,
'current' => $current,
'installed' => $current !== false
];
return $this;
}
public function check() {
$results = [];
$all_ok = true;
// PHPバージョンチェック
if (isset($this->requirements['php'])) {
$req = $this->requirements['php'];
$ok = version_compare($req['current'], $req['min'], '>=');
if ($req['max']) {
$ok = $ok && version_compare($req['current'], $req['max'], '<=');
}
$results[] = [
'type' => 'PHP',
'name' => 'PHP',
'required' => $req['min'] . ($req['max'] ? " - {$req['max']}" : '+'),
'current' => $req['current'],
'status' => $ok ? 'OK' : 'NG'
];
$all_ok = $all_ok && $ok;
}
// 拡張機能チェック
foreach ($this->requirements as $key => $req) {
if (strpos($key, 'ext_') !== 0) continue;
$ok = $req['installed'];
if ($ok && $req['min']) {
$ok = version_compare($req['current'], $req['min'], '>=');
}
$results[] = [
'type' => '拡張機能',
'name' => $req['name'],
'required' => $req['min'] ?: '(任意のバージョン)',
'current' => $req['current'] ?: '未インストール',
'status' => $ok ? 'OK' : 'NG'
];
$all_ok = $all_ok && $ok;
}
return [
'all_ok' => $all_ok,
'results' => $results
];
}
public function displayResults() {
$check = $this->check();
echo "=== バージョン互換性チェック ===\n\n";
echo sprintf("%-12s %-20s %-20s %-15s %s\n",
"種類", "名前", "必要", "現在", "状態");
echo str_repeat("-", 80) . "\n";
foreach ($check['results'] as $result) {
$status_mark = $result['status'] === 'OK' ? '✓' : '✗';
echo sprintf("%-12s %-20s %-20s %-15s %s %s\n",
$result['type'],
$result['name'],
$result['required'],
$result['current'],
$status_mark,
$result['status']
);
}
echo "\n総合結果: " . ($check['all_ok'] ? '✓ すべてOK' : '✗ 要件を満たしていません') . "\n";
return $check['all_ok'];
}
}
// 使用例
$checker = new VersionChecker();
$checker
->requirePHP('8.0.0', '8.9.99')
->requireExtension('mysqli', '8.0.0')
->requireExtension('pdo')
->requireExtension('gd')
->requireExtension('curl')
->displayResults();
?>
例4: バージョン別の機能分岐
<?php
function getAvailableFeatures() {
$version_id = PHP_VERSION_ID;
$features = [
'Named Arguments (8.0+)' => $version_id >= 80000,
'Match Expression (8.0+)' => $version_id >= 80000,
'Nullsafe Operator (8.0+)' => $version_id >= 80000,
'Enums (8.1+)' => $version_id >= 80100,
'Readonly Properties (8.1+)' => $version_id >= 80100,
'Readonly Classes (8.2+)' => $version_id >= 80200,
'Disjunctive Normal Form Types (8.2+)' => $version_id >= 80200,
];
echo "=== PHP機能サポート状況 ===\n";
echo "PHPバージョン: " . phpversion() . "\n\n";
foreach ($features as $feature => $supported) {
$status = $supported ? '✓ サポート' : '✗ 非サポート';
echo sprintf("%-40s %s\n", $feature, $status);
}
return $features;
}
getAvailableFeatures();
?>
例5: セキュリティバージョンチェック
<?php
function checkSecurityStatus() {
$version = phpversion();
$version_id = PHP_VERSION_ID;
// サポート終了バージョン
$eol_versions = [
'7.4' => ['date' => '2022-11-28', 'id' => 70400],
'8.0' => ['date' => '2023-11-26', 'id' => 80000],
'8.1' => ['date' => '2024-11-25', 'id' => 80100],
];
echo "=== セキュリティステータス ===\n";
echo "PHPバージョン: {$version}\n\n";
$major_minor = PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;
$has_issue = false;
// EOLチェック
foreach ($eol_versions as $ver => $info) {
if ($major_minor === $ver) {
echo "⚠ 警告: このバージョンはサポート終了しています\n";
echo " EOL日: {$info['date']}\n";
echo " 推奨: PHP 8.2以降へのアップグレード\n";
$has_issue = true;
break;
}
}
// 最新版チェック
if ($version_id < 80200) {
echo "⚠ 情報: より新しいPHPバージョンが利用可能です\n";
echo " 推奨バージョン: PHP 8.2以降\n";
} elseif (!$has_issue) {
echo "✓ このバージョンは現在サポートされています\n";
}
}
checkSecurityStatus();
?>
バージョン比較のテクニック
version_compare関数との組み合わせ
<?php
function checkVersionCompatibility($required_version, $operator = '>=') {
$current = phpversion();
$compatible = version_compare($current, $required_version, $operator);
echo "必要なバージョン: {$required_version} ({$operator})\n";
echo "現在のバージョン: {$current}\n";
echo "互換性: " . ($compatible ? '✓ OK' : '✗ NG') . "\n";
return $compatible;
}
// 使用例
checkVersionCompatibility('8.0.0', '>=');
checkVersionCompatibility('8.9.99', '<=');
?>
PHP_VERSION_IDを使った高速比較
<?php
// PHP_VERSION_ID: メジャー*10000 + マイナー*100 + リリース
// 例: 8.2.10 = 80210
// 方法1: 文字列比較(遅い)
if (version_compare(phpversion(), '8.0.0', '>=')) {
// 処理
}
// 方法2: 整数比較(速い)
if (PHP_VERSION_ID >= 80000) {
// 処理
}
// ベンチマーク
$iterations = 100000;
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$result = version_compare(phpversion(), '8.0.0', '>=');
}
$time1 = microtime(true) - $start;
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$result = PHP_VERSION_ID >= 80000;
}
$time2 = microtime(true) - $start;
echo "=== パフォーマンス比較 ===\n";
echo "version_compare: " . number_format($time1, 6) . "秒\n";
echo "PHP_VERSION_ID: " . number_format($time2, 6) . "秒\n";
echo "差分: " . number_format(($time1 / $time2), 2) . "x 速い\n";
?>
拡張機能の詳細チェック
特定の拡張機能の詳細確認
<?php
function checkExtensionDetails($extension) {
echo "=== {$extension} 拡張機能の詳細 ===\n\n";
// インストール確認
$installed = extension_loaded($extension);
echo "インストール: " . ($installed ? '✓ はい' : '✗ いいえ') . "\n";
if (!$installed) {
echo "\nこの拡張機能はインストールされていません\n";
return;
}
// バージョン取得
$version = phpversion($extension);
echo "バージョン: " . ($version ?: '(不明)') . "\n";
// 関数一覧
$functions = get_extension_funcs($extension);
if ($functions) {
echo "\n提供される関数 (" . count($functions) . "個):\n";
foreach (array_slice($functions, 0, 10) as $func) {
echo " - {$func}()\n";
}
if (count($functions) > 10) {
echo " ... 他 " . (count($functions) - 10) . "個\n";
}
}
}
// 使用例
checkExtensionDetails('mysqli');
?>
よく使う拡張機能のバージョンレポート
<?php
function generateExtensionReport() {
$important_extensions = [
'Core' => '必須',
'mysqli' => 'データベース',
'pdo' => 'データベース',
'pdo_mysql' => 'データベース',
'curl' => 'HTTP通信',
'openssl' => 'セキュリティ',
'mbstring' => 'マルチバイト',
'gd' => '画像処理',
'zip' => 'ファイル圧縮',
'xml' => 'XML処理',
'json' => 'JSON処理',
];
echo "=== 重要な拡張機能レポート ===\n";
echo "PHPバージョン: " . phpversion() . "\n\n";
echo sprintf("%-20s %-20s %-15s %s\n",
"拡張機能", "カテゴリ", "バージョン", "状態");
echo str_repeat("-", 75) . "\n";
foreach ($important_extensions as $ext => $category) {
$loaded = extension_loaded($ext);
$version = $loaded ? (phpversion($ext) ?: 'N/A') : '-';
$status = $loaded ? '✓' : '✗';
echo sprintf("%-20s %-20s %-15s %s\n",
$ext, $category, $version, $status);
}
}
generateExtensionReport();
?>
総合診断ツール
<?php
function comprehensiveDiagnostics() {
echo "=== PHP総合診断 ===\n\n";
echo date('Y-m-d H:i:s') . "\n\n";
// 1. PHPバージョン情報
echo "【1. PHPバージョン】\n";
echo " バージョン: " . phpversion() . "\n";
echo " Version ID: " . PHP_VERSION_ID . "\n";
echo " SAPI: " . PHP_SAPI . "\n";
echo " OS: " . PHP_OS . " (" . PHP_OS_FAMILY . ")\n";
echo " アーキテクチャ: " . (PHP_INT_SIZE * 8) . "bit\n\n";
// 2. メモリ情報
echo "【2. メモリ設定】\n";
echo " 制限: " . ini_get('memory_limit') . "\n";
echo " 現在の使用量: " . number_format(memory_get_usage(true) / 1024 / 1024, 2) . " MB\n";
echo " ピーク使用量: " . number_format(memory_get_peak_usage(true) / 1024 / 1024, 2) . " MB\n\n";
// 3. 拡張機能
$extensions = get_loaded_extensions();
echo "【3. 拡張機能】\n";
echo " 総数: " . count($extensions) . "個\n";
echo " 一覧: " . implode(', ', array_slice($extensions, 0, 10)) . "...\n\n";
// 4. 重要な設定
echo "【4. 重要な設定】\n";
$settings = ['display_errors', 'error_reporting', 'max_execution_time',
'upload_max_filesize', 'post_max_size', 'date.timezone'];
foreach ($settings as $setting) {
echo " {$setting}: " . ini_get($setting) . "\n";
}
echo "\n";
// 5. 設定ファイル
echo "【5. 設定ファイル】\n";
$main_ini = php_ini_loaded_file();
echo " メイン: " . ($main_ini ?: 'なし') . "\n";
}
comprehensiveDiagnostics();
?>
まとめ
phpversionは、PHPのバージョン情報を取得するためのシンプルで重要な関数です。
主な特徴:
- ✅ PHPのバージョンを文字列で返す
- ✅ 拡張機能のバージョンも取得可能
- ✅
version_compareと組み合わせて互換性チェック - ✅ PHP_VERSION定数も利用可能
関連する定数:
PHP_VERSION– バージョン文字列PHP_VERSION_ID– バージョンID(整数、高速比較用)PHP_MAJOR_VERSION– メジャーバージョンPHP_MINOR_VERSION– マイナーバージョンPHP_RELEASE_VERSION– リリースバージョン
ベストプラクティス:
- 単純な取得なら
PHP_VERSION定数を使用(高速) - バージョン比較は
version_compareかPHP_VERSION_ID - 拡張機能は
extension_loadedと組み合わせる - セキュリティ上、サポートされているバージョンを使用
活用シーン:
- 環境確認・診断ツールの作成
- バージョン互換性チェック
- 条件付き機能の実装
- セキュリティ監視
この関数を理解して、適切なバージョン管理とセキュリティ対策を行いましょう!
参考リンク
この記事が役に立ったら、ぜひシェアしてください!
