【PHP】PHPからApacheのバージョンを取得する
PHP から Apache のバージョンを取得する方法についての記事です。
コード
function apacheVersion($pShell = null)
{
//-- Apacheのバージョンを取得するためのコマンド
$shell = (isset($pShell)) ? $pShell
: 'apachectl -v';
//-- Apacheのバージョンを取得するための正規表現
$regex = '/Apache\/(\d{1,2}\.\d{1,2}\.\d{1,2})/';
switch(true) {
//-- 1.環境変数からの取得を試みる
case (preg_match($regex, getenv('SERVER_SOFTWARE'), $matchAry)):
//-- 2.apache_get_version()での取得を試みる
case (function_exists('apache_get_version') && preg_match($regex, apache_get_version(), $matchAry)):
//-- 3.コマンドでの取得を試みる
case (preg_match($regex, shell_exec($shell), $matchAry)):
return $matchAry[1];
//-- バージョン取得失敗
default:
return false;
}
}
使い方
$version = apacheVersion(); // string(6) "2.4.39"
//-- Apacheをソースからビルドした環境やWindows環境等で
//-- Apacheのバージョンを取得するコマンドを指定したい時
apacheVersion('C:\apache\bin\httpd.exe -v');
なぜ三段構えになっているか
1.環境変数からの取得を試みる
この方法では、例えば PHP を CLI 版で動作させている時は取得できません。('SERVER_SOFTWARE' は定義されません。)
また、この方法で取得できるのは、Apache の ServerTokens
の設定が、Full
OS
Minimal
の時のみです。
公開環境では Prod
を設定し、HTTP ヘッダに Apache のバージョンが公開されないようにするのが普通です。
ServerTokens Prod
この設定の場合、getenv('SERVER_SOFTWARE')
には 'Apache'
という文字列しか入りませんので、バージョンを取得する事はできません。
2.apache_get_version()での取得を試みる
この関数で取得できる値は、基本的に 1 と同じです。
つまり、あまり実用性のない関数だというのが個人的な認識ですが、1 で失敗しても 2 で成功するケースがあるのかもしれないので、念の為に書いています。
3.コマンドでの取得を試みる
…というわけで、最終手段として Apache に直接聞いちゃえ!って事です。
Author And Source
この問題について(【PHP】PHPからApacheのバージョンを取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/fallout/items/7c2dd5a08e3e1f905a76著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .