【PHP】获取Apache版本

这篇文章是关于如何使用PHP获取Apache版本的方法。


代码 (Mandarin Chinese: mǎ)

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');

为什么会变成三个阶段的结构? huì gè de ?)

1. 尝试从环境变量获取

在这种方法中,例如,当使用 PHP 的 CLI 版本运行时,无法获取(无法定义)”SERVER_SOFTWARE”。

此外,只有在Apache的ServerTokens配置为Full OS Minimal时,才能使用此方法获取。

在公共环境中,通常会设置Prod并防止Apache版本在HTTP头中公开。

ServerTokens Prod

在这种设置下, getenv(‘SERVER_SOFTWARE’) 只能返回字符串 ‘Apache’,所以无法获取版本信息。

尝试通过apache_get_version()进行获取。

这个函数可以获得的值基本上和1是相同的。

总而言之,个人认为这个函数没有太多实用性,但是如果在1处失败,可能在2处成功,所以为了以防万一写下来了。

尝试通过命令进行获取。

因此,作为最后的手段,直接向Apache询问吧!

bannerAds