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

Для создания уникального сценария 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_OS предваряется именем хоста os: http://us2.php.net/manual/en/reserved.constants.php

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

  1. Используя PHP_OS который является PHP_OS и укажет на «имя операционной системы», в котором был встроен ваш PHP.
  2. Используя PHP встроенную функцию php_uname() , вы расскажете больше о платформе (имя операционной системы, имя хоста, информация о версии, название выпуска, тип машины), на котором работает ваш скрипт.

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

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

Ни 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] Датская фраза означает удачу.

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

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

 /** * return DOS OR UNIX */ function familyOS() { return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX"; } 
 $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);