在 Linux 系统上,通常有类似/etc/lsb-release
或/etc/os-release
包含有关发行版信息的文件。
您可以在 PHP 中阅读它们并提取它们的值:
if (strtolower(substr(PHP_OS, 0, 5)) === 'linux')
{
$vars = array();
$files = glob('/etc/*-release');
foreach ($files as $file)
{
$lines = array_filter(array_map(function($line) {
// split value from key
$parts = explode('=', $line);
// makes sure that "useless" lines are ignored (together with array_filter)
if (count($parts) !== 2) return false;
// remove quotes, if the value is quoted
$parts[1] = str_replace(array('"', "'"), '', $parts[1]);
return $parts;
}, file($file)));
foreach ($lines as $line)
$vars[$line[0]] = $line[1];
}
print_r($vars);
}
(不是最优雅的 PHP 代码,但它完成了工作。)
这会给你一个像这样的数组:
Array
(
[DISTRIB_ID] => Ubuntu
[DISTRIB_RELEASE] => 13.04
[DISTRIB_CODENAME] => raring
[DISTRIB_DESCRIPTION] => Ubuntu 13.04
[NAME] => Ubuntu
[VERSION] => 13.04, Raring Ringtail
[ID] => ubuntu
[ID_LIKE] => debian
[PRETTY_NAME] => Ubuntu 13.04
[VERSION_ID] => 13.04
[HOME_URL] => http://www.ubuntu.com/
[SUPPORT_URL] => http://help.ubuntu.com/
[BUG_REPORT_URL] => http://bugs.launchpad.net/ubuntu/
)
该ID
字段最适合确定发行版,因为它由 Linux 标准库定义,并且应该出现在常见发行版中。
顺便说一句,我建议不要使用exec()
或system()
读取文件,因为出于安全原因,它们在许多服务器上被禁用。(另外,它没有意义,因为 PHP 可以原生读取文件。如果它不能读取它们,那么通过系统调用也将不可能。)