sistema operativo obtener nombre info etiquetas codigo cliente php operating-system

operativo - php show hostname



¿Cómo obtener el sistema operativo en el que se ejecuta PHP? (9)

A partir de PHP 7.2.0 tenemos una nueva Constante Predefinida para obtener la familia del sistema operativo, es decir, PHP_OS_FAMILY . Devuelve una cadena Cualquiera de ''Windows'', ''BSD'', ''OSX'', ''Solaris'', ''Linux'' o ''Unknown''.

Para crear un script específico para UNIX / DOS, necesito saber qué tipo de sistema operativo soy.

¿Cómo obtengo esta información?
phpinfo(); me dice mucho más y no está muy claro si estoy ejecutando en Unix o no.



Hay 2 formas diferentes de comprobar la plataforma en la que se ejecuta PHP.

  1. El uso de PHP_OS que es una constante, apuntará al ''nombre del sistema operativo'' en el que se PHP_OS su PHP.
  2. El uso de la función php_uname() PHP le php_uname() más información acerca de la plataforma (nombre del sistema operativo, nombre del host, información de la versión, nombre de la versión, tipo de máquina) que su script está ejecutando en ella.

PHP no proporciona ninguna función para obtener el nombre de la distribución, php_uname es similar al comando uname Linux, lo que significa que no proporciona ninguna información sobre la distribución en sí.

Ni php_uname ni PHP_OS dan información. sobre la distribución pero el tipo de SO (por ejemplo, Linux / Windows).

Creo que la mejor manera de saber qué sistema operativo / distribución se está ejecutando es leer /etc/os-release , lo bueno es que este archivo tiene permiso de lectura para todos los usuarios y lo malo es que puede que no funcione en el alojamiento compartido.

Aquí escribí una función PHP muy simple que lee y convierte os-release a una matriz:

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

Esta función imprime algo como esto:

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] La frase danesa significa buena suerte.


PHP tiene muchas constantes predefinidas que a menudo son útiles.

Aquí, PHP_OS es el que estás buscando.


Por ejemplo, en mi máquina actual, este código:

var_dump(PHP_OS);

Da :

string ''Linux'' (length=5)


Tiene algunos ejemplos y comparaciones con lo que la función php_uname puede obtener en la página de manual de php_uname ; por ejemplo (citando) :

<?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!''; }

Esa página también dice:

Para el nombre del sistema operativo, considere usar la constante PHP_OS , pero tenga en cuenta que esta constante contendrá el sistema operativo en el que se creó PHP.



Solo tenga en cuenta que PHP_OS realidad contiene la plataforma en la que se creó PHP. Puede que esta no sea la misma plataforma en la que se implementa. Por php_uname(''s'') tanto, php_uname(''s'') es más confiable.


#!/usr/bin/env php <?php $platform = DIRECTORY_SEPARATOR === ''//' ? ''Windows'' : ''Unix/Linux'';

Soy consciente de que esto no es muy granular, pero puede ser suficiente para un reconocimiento simple entre los sistemas Win y * nix. YMMV


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