【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询问吧!