Подтвердить что ты не робот

Как получить ОС, на которых работает PHP?

Для создания уникального unix/dos script мне нужно знать, на какой операционной системе я нахожусь.

Как получить эту информацию? phpinfo(); говорит мне намного больше и не очень ясно, работает ли я в unix или нет.

4b9b3361

Ответ 1

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 была построена включена.

Ответ 2

Просто имейте в виду, что PHP_OS фактически содержит платформу, на которой был построен PHP. Это может быть не та самая платформа, на которой она развернута. Поэтому php_uname('s') более надежна.

Ответ 4

Как и в PHP 7.2.0, у нас есть новая предопределенная константа для получения семейства операционной системы, то есть PHP_OS_FAMILY. Он возвращает строку Либо "Windows", "BSD", "OSX", "Solaris", "Linux" или "Unknown".

Ответ 5

Есть два разных способа проверить платформу, на которой работает ваш PHP.

  • Используя PHP_OS, который является константой, и укажет на имя системы ", в котором был встроен ваш PHP.
  • Использование встроенной функции PHP php_uname(), которая расскажет вам больше о платформе (название операционной системы, имя хоста, версия информация, название релиза, тип машины), на котором запущен ваш script на нем.

Ответ 6

PHP Не предоставляет никакой функции для получения имени дистрибутива, php_uname похож на команду Linux uname, это означает, что он не предоставляет никакой информации о самом дистрибутиве.

Ни php_uname, ни PHP_OS не указывается. о распределении, но тип ОС (например, Linux/Windows).

Я думаю, что лучший способ узнать, что OS/дистрибутив работает, чтобы читать /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
)

Held og lykke [1];-)

[1] Датская фраза означает удачу.

Ответ 7

В php 7.2.0 вы можете использовать константу PHP_OS_FAMILY:

В другой версии PHP вы можете использовать:

/**
* return DOS OR UNIX
*/
function familyOS() {
   return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}

Ответ 8

$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);