Для создания уникального unix/dos script мне нужно знать, на какой операционной системе я нахожусь.
Как получить эту информацию?
phpinfo();
говорит мне намного больше и не очень ясно, работает ли я в unix или нет.
Для создания уникального unix/dos script мне нужно знать, на какой операционной системе я нахожусь.
Как получить эту информацию?
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 7.2.0, у нас есть новая предопределенная константа для получения семейства операционной системы, то есть PHP_OS_FAMILY. Он возвращает строку Либо "Windows", "BSD", "OSX", "Solaris", "Linux" или "Unknown".
Есть два разных способа проверить платформу, на которой работает ваш PHP.
PHP_OS
, который является константой, и укажет на
имя системы ", в котором был встроен ваш PHP.php_uname()
, которая расскажет вам больше
о платформе (название операционной системы, имя хоста, версия
информация, название релиза, тип машины), на котором запущен ваш script
на нем.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] Датская фраза означает удачу.
В 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);