为了编写与Unix / DOS特定脚本,我需要知道我所在的操作系统类型。
如何获取此信息?phpinfo()
会告诉我更多信息,但不清楚我是否正在运行Unix。
为了编写与Unix / DOS特定脚本,我需要知道我所在的操作系统类型。
如何获取此信息?phpinfo()
会告诉我更多信息,但不清楚我是否正在运行Unix。
PHP有许多预定义常量,通常很有用。
在这里,PHP_OS
是你要找的那个。
例如,在我的当前机器上,这段代码:
var_dump(PHP_OS);
提供:
string 'Linux' (length=5)
你可以在 php_uname 函数的手册页面 中找到一些示例和与其相比较的内容;例如php_uname
函数能够获取什么(摘录):
<?php
echo php_uname();
echo PHP_OS;
/* Some possible outputs:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux
FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD
Windows NT XN1 5.1 build 2600
WINNT
*/
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
那个页面还说:
如果只需要操作系统的名称,可以考虑使用
PHP_OS
常量,但请记住,这个常量包含PHP所构建的操作系统。
请记住,PHP_OS
实际上包含了构建PHP的平台。这可能与部署它的平台不同。因此,php_uname('s')
更可靠。
php_uname('s')
会返回"Windows NT",所以我不知道它有多可靠 :) 我猜可以说Win 7是基于NT的,但仍然... - laurentver
以查看您的Win OS的版本号。 - spikyjt从PHP 7.2.0开始,我们有一个新的预定义常量可以获取操作系统家族,即PHP_OS_FAMILY。 它返回一个字符串 可能是'Windows','BSD','OSX','Solaris','Linux'或'Unknown'。
PHP没有提供任何函数来获取发行版名称,php_uname
类似于Linux命令uname
,但不提供有关发行版本身的任何信息。
php_uname
和PHP_OS
都不能提供关于发行版的足够信息,只能提供操作系统类型(例如Linux / Windows)。
我认为了解正在运行的操作系统/发行版的最佳方法是读取/etc/os-release
文件,好处是此文件所有系统用户都有读取权限,缺点是它可能无法在共享主机上工作。
这里我编写了一个非常简单的PHP函数,将os-release
读取并转换为数组:
function getOSInformation()
{
if (false == function_exists("shell_exec") || false == is_readable("/etc/os-release")) {
return null;
}
$os = shell_exec('cat /etc/os-release');
$listIds = preg_match_all('/.*=/', $os, $matchListIds);
$listIds = $matchListIds[0];
$listVal = preg_match_all('/=.*/', $os, $matchListVal);
$listVal = $matchListVal[0];
array_walk($listIds, function(&$v, $k){
$v = strtolower(str_replace('=', '', $v));
});
array_walk($listVal, function(&$v, $k){
$v = preg_replace('/=|"/', '', $v);
});
return array_combine($listIds, $listVal);
}
Array
(
[name] => Ubuntu
[version] => 16.04.2 LTS (Xenial Xerus)
[id] => ubuntu
[id_like] => debian
[pretty_name] => Ubuntu 16.04.2 LTS
[version_id] => 16.04
[home_url] => http://www.ubuntu.com/
[support_url] => http://help.ubuntu.com/
[bug_report_url] => http://bugs.launchpad.net/ubuntu/
[version_codename] => xenial
[ubuntu_codename] => xenial
)
PHP_OS_FAMILY
常量:
在其他PHP版本中,您可以使用:/**
* return DOS OR UNIX
*/
function familyOS() {
return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
有两种不同的方法可以检查PHP运行的平台。
PHP_OS
,它是一个常量,将指向PHP构建所在的“操作系统名称”。php_uname()
,它将告诉您更多关于脚本正在运行的平台(操作系统名称、主机名、版本信息、发布名称、机器类型)的信息。#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
? 'Windows'
: 'Unix/Linux';
PHP_EOL
,... - helveteswitch (strtolower(php_uname('s'))) {
case "linux": echo "Server is running on linux OS"
break;
case "windows nt": echo "Server is running on Windows OS"
break;
default:
echo "Unknown";
break;
}
PHP_OS
,但这并不准确,因为文档说PHP构建的操作系统。所以php_uname('s')
是一个好方法。PhpStrom 2020.2 IDE
建议使用[EA]应该使用PHP_OS常量。
$user_agent = $_SERVER['HTTP_USER_AGENT'];
function getOS() {
global $user_agent;
$os_platform = "Unknown OS Platform";
$os_array = array(
'/windows nt 6.2/i' => 'Windows 8',
'/windows nt 6.1/i' => 'Windows 7',
'/windows nt 6.0/i' => 'Windows Vista',
'/windows nt 5.2/i' => 'Windows Server 2003/XP x64',
'/windows nt 5.1/i' => 'Windows XP',
'/windows xp/i' => 'Windows XP',
'/windows nt 5.0/i' => 'Windows 2000',
'/windows me/i' => 'Windows ME',
'/win98/i' => 'Windows 98',
'/win95/i' => 'Windows 95',
'/win16/i' => 'Windows 3.11',
'/macintosh|mac os x/i' => 'Mac OS X',
'/mac_powerpc/i' => 'Mac OS 9',
'/linux/i' => 'Linux',
'/ubuntu/i' => 'Ubuntu',
'/iphone/i' => 'iPhone',
'/ipod/i' => 'iPod',
'/ipad/i' => 'iPad',
'/android/i' => 'Android',
'/blackberry/i' => 'BlackBerry',
'/webos/i' => 'Mobile'
);
foreach ($os_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$os_platform = $value;
}
}
return $os_platform;
}
$user_os = getOS();
$device_details = "<strong>Operating System: </strong>".$user_os."";
print_r($device_details);
"PHP 所构建的操作系统。"
, 因此除非有人在 Linux 上使用了专为 Windows 设计的 PHP 版本,否则它应该可以正常运行。另外,对于 PHP7.2 及以上版本,如 shery089 的回答所示,PHP_OS_FAMILY
应该足够满足大多数用户的需求。 - Arun A S