如何获取运行 PHP 的操作系统?
Posted
技术标签:
【中文标题】如何获取运行 PHP 的操作系统?【英文标题】:How to get the OS on which PHP is running? 【发布时间】:2010-12-01 17:18:54 【问题描述】:为了构建一个 unix/dos 特定的脚本,我需要知道我在哪种操作系统上。
我如何获得这些信息?phpinfo();
告诉我更多但不是很清楚我是否在 unix 上运行。
【问题讨论】:
【参考方案1】: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 构建。
【讨论】:
如果 PHP_OS 为您提供构建 PHP 的操作系统,它怎么可能“工作得非常好”?它迟早会破裂。 这是错误的答案!请参阅下面的 spikyjt 的答案! @Pacerier 目前的 php 文档说"The operating system PHP was built for."
,所以除非有人在 linux 上使用适用于 windows 的 php 版本,否则应该没问题。附带说明一下,对于 php7.2 及更高版本,shery089 的答案中显示的PHP_OS_FAMILY
对于大多数用户来说应该足够了【参考方案2】:
请记住,PHP_OS
实际上包含构建 PHP 的平台。这可能与部署它的平台不同。所以php_uname('s')
更可靠。
【讨论】:
php_uname('s')
在 Windows 7 上返回“Windows NT”,所以我不知道它有多可靠:) 我想有人可能会说 Win 7 基于 NT,但仍然......
Windows 7 绝对是 Windows NT(6.1 版)。 Vista 是 Windows NT 6,XP 是 NT 5.1,2000 是 NT 5。所以是的,它是可靠的!检查here 以供参考。在 cmd 提示符下键入 ver
以查看您的 Win OS 的版本号。
这对我来说似乎是正确的答案。接受的答案是完全错误的,并且没有回答 OP 的问题。
您能否详细说明“PHP 的操作系统是为什么而构建的”。方法? (PHP_OS
php.net/manual/en/reserved.constants.php 的描述)它就像编译 PHP 解释器的操作系统吗?它如何在另一个操作系统上使用? (这对于类似的 Unix 系统是可能的?对于同一操作系统的不同版本?)
@YakovL 你提到的措辞不在我的回答中。我的回答是指“构建 PHP 的平台”和“部署它 [PHP] 的平台”。虽然这很少是不同的操作系统,但它通常是不同的机器,并且在技术上可以为其他平台交叉编译。需要明确的是,PHP_OS 是一个编译常量,指的是 PHP 本身的构建,与主机服务器无关。 php_uname() 是一个运行时函数,它会返回有关主机服务器的信息。【参考方案3】:
从 PHP 7.2.0 开始,我们有一个新的预定义常量来获取操作系统系列,即 PHP_OS_FAMILY。 它返回一个 字符串 “Windows”、“BSD”、“OSX”、“Solaris”、“Linux”或“未知”。
【讨论】:
【参考方案4】: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] 丹麦语短语意味着好运。
【讨论】:
确切地说是“祝你好运和好运”【参考方案5】:PHP_OS 以主机操作系统名称为前缀:http://us2.php.net/manual/en/reserved.constants.php
【讨论】:
【参考方案6】:在 php 7.2.0 上,您可以使用 PHP_OS_FAMILY
常量:
在其他 PHP 版本中你可以使用:
/**
* return DOS OR UNIX
*/
function familyOS()
return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
【讨论】:
【参考方案7】:有 2 种不同的方法可以检查您的 PHP 运行的平台。
-
使用
PHP_OS
,它是一个常量,将指向'操作
系统名称”,您的 PHP 是在其中构建的。
使用 PHP 内置函数 php_uname()
会告诉你更多
关于平台(操作系统名称、主机名、版本
信息、版本名称、机器类型)您的脚本正在运行
就可以了。
【讨论】:
【参考方案8】:#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
? 'Windows'
: 'Unix/Linux';
我知道这不是很精细,但它可能足以在 Win 和 *nix 系统之间进行简单识别。 YMMV
【讨论】:
当然也可以检查其他特定于平台的常量,即。PHP_EOL
, ...【参考方案9】:
这是我正在使用的
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 常量。
【讨论】:
【参考方案10】:$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);
【讨论】:
不鼓励仅使用代码回答,因为它们没有为未来的读者提供太多信息,请对您所写的内容提供一些解释 这会获取客户端操作系统(或对其进行最佳猜测),而不是服务器操作系统,因此无法回答问题。还应该注意的是,客户端用户代理很容易被欺骗,即使在您确实需要客户端操作系统的情况下,这也不可靠。这也仅在发出 http 请求时才相关,并且在命令行中是无用的。以上是关于如何获取运行 PHP 的操作系统?的主要内容,如果未能解决你的问题,请参考以下文章