タイトル: バージョンの確認
SEOタイトル: PHP バージョン確認方法完全ガイド(php -v / phpinfo / 定数 / Web Server)
| この記事の要点 |
|
CLI で確認
# 標準
php --version
# PHP 8.2.10 (cli) (built: Aug 31 2023 13:53:39) (NTS)
# Copyright (c) The PHP Group
# Zend Engine v4.2.10, Copyright (c) Zend Technologies
# 短縮形
php -v
# パス確認(Linux/Mac)
which php
# /usr/bin/php
ls -la $(which php)
# Windows
where php
Web 経由で確認
<?php
// 方法 1: phpinfo() で詳細情報全表示
// (★ 本番では絶対に残さない!情報漏洩リスク)
phpinfo();
// 方法 2: phpversion() で値だけ取得
echo phpversion(); // 8.2.10
// 方法 3: 定数
echo PHP_VERSION; // 8.2.10
echo PHP_MAJOR_VERSION; // 8
echo PHP_MINOR_VERSION; // 2
echo PHP_RELEASE_VERSION; // 10
echo PHP_EXTRA_VERSION; // (空 or RC1 等)
echo PHP_VERSION_ID; // 80210 (= 80000+200+10)
定数の中身
| 定数 | 例(8.2.10 の場合) | 用途 |
|---|---|---|
PHP_VERSION | "8.2.10" | 文字列表現 |
PHP_MAJOR_VERSION | 8 | メジャー |
PHP_MINOR_VERSION | 2 | マイナー |
PHP_RELEASE_VERSION | 10 | パッチ |
PHP_EXTRA_VERSION | "" | "alpha1" "RC2" 等 |
PHP_VERSION_ID | 80210 | 数値比較用 ★ |
PHP_OS | "Linux" | OS 名 |
PHP_OS_FAMILY | "Linux" | OS 系統 (Windows/Linux/Darwin/BSD/Solaris/Unknown) |
PHP_INT_SIZE | 8 | int サイズ(32bit=4, 64bit=8) |
PHP_INT_MAX | 9223372036854775807 | int 最大値 |
バージョン比較
<?php
// version_compare(): 推奨。文字列比較なので 10 > 9 もOK
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
echo "PHP 8 以上で動作中";
}
if (version_compare(PHP_VERSION, '7.4.0', '<')) {
die("PHP 7.4 以上が必要です");
}
// PHP_VERSION_ID で高速比較
if (PHP_VERSION_ID >= 80100) {
// PHP 8.1+ 専用機能を使う
enum Status { case Active; case Inactive; }
}
// ❌ ダメな例: 文字列比較
if (PHP_VERSION >= '7.10.0') {
// "8.0.0" < "7.10.0" になる(先頭文字比較)
}
php.ini と SAPI の確認
# php.ini のパス
php --ini
# Configuration File (php.ini) Path: /etc/php/8.2/cli
# Loaded Configuration File: /etc/php/8.2/cli/php.ini
# Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
# Additional .ini files parsed: /etc/php/8.2/cli/conf.d/10-opcache.ini ...
# 有効モジュール一覧
php -m
# 詳細情報(CLI から phpinfo)
php -i | head -30
# 特定設定値
php -r 'echo ini_get("memory_limit");' # 128M
php -r 'echo ini_get("upload_max_filesize");'
Composer 経由の確認
# Composer が認識している PHP
composer show -p
# +-------------------------------+--------+
# | name | version|
# +-------------------------------+--------+
# | php | 8.2.10 |
# | php-64bit | 8.2.10 |
# | ext-json | 8.2.10 |
# | ... | ... |
# +-------------------------------+--------+
# プロジェクトの composer.json で要件を確認
cat composer.json | grep -A 2 '"require"'
# "require": {
# "php": ">=8.1",
# 整合性チェック
composer check-platform-reqs
Web Server(Apache / Nginx + PHP-FPM)の PHP
★ CLI で見える PHP と Web Server が使う PHP は別の可能性があります。
<?php
// info.php として配置(★ アクセス後すぐ削除)
echo "PHP Version: " . PHP_VERSION . "\n";
echo "SAPI: " . PHP_SAPI . "\n";
// CLI: "cli"
// Apache mod_php: "apache2handler"
// PHP-FPM: "fpm-fcgi"
// 内蔵サーバ: "cli-server"
echo "Loaded INI: " . php_ini_loaded_file() . "\n";
phpinfo();# Apache + mod_php のバージョン
apache2ctl -M | grep php # Linux
httpd -M | grep php # 一部ディストリ
# PHP-FPM のバージョン
php-fpm -v
/usr/sbin/php-fpm8.2 -v # フルパス
# Nginx の PHP 設定ファイル
grep -r "fastcgi_pass" /etc/nginx/
# fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
# ↑ ここで使われている FPM のバージョンが Web 経由の PHP
複数バージョン共存
# Ubuntu / Debian の場合
update-alternatives --display php
update-alternatives --config php
# 番号入力で切替
# Mac (Homebrew)
brew install php@8.1 php@8.2 php@8.3
brew link --overwrite --force php@8.2
brew unlink php@8.2 && brew link php@8.3
# 各バージョンを直接呼ぶ
/usr/bin/php7.4 -v
/usr/bin/php8.0 -v
/usr/bin/php8.2 -v
phpenv / phpbrew で柔軟管理
# phpenv: rbenv ライクなバージョン管理
phpenv install 8.2.10
phpenv versions # 一覧
phpenv global 8.2.10 # 全体デフォルト
phpenv local 8.1.20 # ディレクトリローカル(.php-version ファイル生成)
# phpbrew: より柔軟な切替
phpbrew install 8.2.10 +default +mysql +pdo
phpbrew use php-8.2.10
phpbrew switch php-8.2.10 # 永続切替
# Docker でバージョン分離(推奨)
docker run --rm -it php:8.2-cli php -v
docker run --rm -it php:8.1-fpm php -v
シェル関数で簡単確認
# ワンライナーで全部表示
php -r 'echo PHP_VERSION . PHP_EOL . PHP_SAPI . PHP_EOL . php_ini_loaded_file() . PHP_EOL;'
# JSON 形式で
php -r 'echo json_encode([
"version" => PHP_VERSION,
"version_id" => PHP_VERSION_ID,
"major" => PHP_MAJOR_VERSION,
"sapi" => PHP_SAPI,
"ini" => php_ini_loaded_file(),
"extensions" => get_loaded_extensions(),
], JSON_PRETTY_PRINT);'
FAQ
Q: php -v で出るバージョンと Web のバージョンが違う
A: CLI と Web (mod_php / PHP-FPM) で別バイナリが使われています。phpinfo() をブラウザで開いてサーバ側を確認してください。
Q: バージョン要件を満たさない場合の挙動
A: Composer は require php を満たさないと composer install 失敗。Laravel など主要フレームワークは起動時にチェックして RuntimeException を投げます。
Q: phpinfo() を本番に置きっぱなしは危険?
A: ★ 非常に危険。open_basedir / session.save_path / DB 接続文字列まで露出します。デバッグ後即削除、expose_php = Off も php.ini で設定推奨。