LoginSignup
1
0

More than 3 years have passed since last update.

【PHP】PHPからApacheのバージョンを取得する

Last updated at Posted at 2019-05-30

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 に直接聞いちゃえ!って事です。

1
0
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
1
0