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.
En php 7.2.0 puede usar la constante PHP_OS_FAMILY
:
En otra versión de PHP puedes usar:
/**
* return DOS OR UNIX
*/
function familyOS() {
return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
Hay 2 formas diferentes de comprobar la plataforma en la que se ejecuta PHP.
- El uso de
PHP_OS
que es una constante, apuntará al ''nombre del sistema operativo'' en el que sePHP_OS
su PHP. - El uso de la función
php_uname()
PHP lephp_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.
PHP_OS se prefiere con el nombre del sistema operativo host: http://us2.php.net/manual/en/reserved.constants.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);