如何获得运行PHP的操作系统?

Mar*_*sch 49 php operating-system

为了构建一个unix/dos特定的脚本,我需要知道我是哪种操作系统.

我如何获得这些信息?
phpinfo();告诉我更多,不清楚我是否在unix上运行.

Pas*_*TIN 95

PHP有许多预定义的常量,通常很有用.

在这里,PHP_OS是您正在寻找的那个.


例如,在我当前的机器上,这段代码:

var_dump(PHP_OS);
Run Code Online (Sandbox Code Playgroud)

给:

string 'Linux' (length=5)
Run Code Online (Sandbox Code Playgroud)


你有一些例子和比较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!';
}
Run Code Online (Sandbox Code Playgroud)

该页面还说:

对于仅操作系统的名称,请考虑使用PHP_OS 常量,但请记住,此常量将包含PHP 构建的操作系统.

  • 如果它给你构建的PHP PHP,PHP_OS怎么能"工作得很好"?它迟早会被打破. (6认同)

spi*_*yjt 31

请记住,PHP_OS实际上包含构建PHP的平台.这可能与部署它的平台不同.因此php_uname('s')更可靠.

  • Windows 7绝对是Windows NT(版本6.1).Vista是Windows NT 6,XP是NT 5.1,2000是NT 5.所以它是可靠的!查看[此处](http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions)以供参考.在cmd提示符下键入`ver`以查看Win OS的版本号. (8认同)
  • 这对我来说似乎是正确的答案。接受的答案是完全错误的,并且没有回答 OP 问题。 (2认同)

she*_*089 9

PHP 7.2.0开始,我们有一个新的预定义常量来获取操作系统系列,即PHP_OS_FAMILY.它返回一个字符串 'Windows','BSD','OSX','Solaris','Linux'或'Unknown'.


Ahm*_*mad 5

PHP 不提供任何获取发行版名称的函数,php_uname类似于 Linux 命令uname,不提供有关发行版本身的任何信息。

既没有php_uname也没有PHP_OS提供足够的信息。关于发行版,但与操作系统类型有关(例如 Linux / Windows)。

我认为了解正在运行的操作系统/发行版是什么的最好方法是 read /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);
    }
Run Code Online (Sandbox Code Playgroud)

此函数打印如下内容:

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
)
Run Code Online (Sandbox Code Playgroud)

举行 og lykke [1] ;-)

[1] 丹麦语意为好运。