【发布时间】:2010-12-01 17:18:54
【问题描述】:
为了构建一个 unix/dos 特定的脚本,我需要知道我在哪种操作系统上。
我如何获得这些信息?phpinfo(); 告诉我更多但不是很清楚我是否在 unix 上运行。
【问题讨论】:
标签: php operating-system
为了构建一个 unix/dos 特定的脚本,我需要知道我在哪种操作系统上。
我如何获得这些信息?phpinfo(); 告诉我更多但不是很清楚我是否在 unix 上运行。
【问题讨论】:
标签: php operating-system
PHP 有很多predefined constants,它们通常很有用。
这里,PHP_OS 就是您要找的那个。
例如,在我当前的机器上,这段代码:
var_dump(PHP_OS);
给:
string 'Linux' (length=5)
你有一些例子和比较 php_uname 功能可以让你在 manual page of 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 构建。
【讨论】:
"The operating system PHP was built for.",所以除非有人在 linux 上使用适用于 windows 的 php 版本,否则应该没问题。附带说明一下,对于 php7.2 及更高版本,shery089 的答案中显示的PHP_OS_FAMILY 对于大多数用户来说应该足够了
请记住,PHP_OS 实际上包含构建 PHP 的平台。这可能与部署它的平台不同。所以php_uname('s')更可靠。
【讨论】:
php_uname('s') 在 Windows 7 上返回“Windows NT”,所以我不知道它有多可靠:) 我想有人可能会说 Win 7 基于 NT,但仍然......
ver 以查看您的 Win OS 的版本号。
PHP_OSphp.net/manual/en/reserved.constants.php 的描述)它就像编译 PHP 解释器的操作系统吗?它如何在另一个操作系统上使用? (这对于类似的 Unix 系统是可能的?对于同一操作系统的不同版本?)
从 PHP 7.2.0 开始,我们有一个新的预定义常量来获取操作系统系列,即 PHP_OS_FAMILY。 它返回一个 字符串 “Windows”、“BSD”、“OSX”、“Solaris”、“Linux”或“未知”。
【讨论】:
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
)
举行 og lykke [1] ;-)
[1] 丹麦语短语意味着好运。
【讨论】:
PHP_OS 以主机操作系统名称为前缀:http://us2.php.net/manual/en/reserved.constants.php
【讨论】:
在 php 7.2.0 上,您可以使用 PHP_OS_FAMILY 常量:
在其他 PHP 版本中你可以使用:
/**
* return DOS OR UNIX
*/
function familyOS() {
return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
【讨论】:
有 2 种不同的方法可以检查您的 PHP 运行的平台。
PHP_OS,它是一个常量,将指向'操作
系统名称”,您的 PHP 是在其中构建的。php_uname() 会告诉你更多
关于平台(操作系统名称、主机名、版本
信息、版本名称、机器类型)您的脚本正在运行
就可以了。【讨论】:
#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
? 'Windows'
: 'Unix/Linux';
我知道这不是很精细,但它可能足以在 Win 和 *nix 系统之间进行简单识别。 YMMV
【讨论】:
PHP_EOL, ...
这是我正在使用的
switch (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);
【讨论】: