Determinar el
sistema operativo desde PHP es una tarea recurrente cuando programamos un
aplicación web desde
PHP. Esto se puede presentar en dos modalidades, determinar el
sistema operativo de un visitante a nuestra página, o el sistema operativo donde se esta ejecutando la
aplicación servidora.
PHP nos entrega facilidades para efectuar la acción de detectar el sistema operativo de forma muy rapida.
En este artículo escribiremos el código necesario para conocer el sistema operativo desde la propia ejecución del
script PHP.
Determinar el sistema operativo del servidor
Conocer el sistema operativo anfitrión donde se ejecuta nuestra
aplicación web PHP, es sencillo:
<?php
// usando la constante predefinida para
// obtener el nombre del sistema operativo,
// con el cual el intérprete PHP fue compilado,
// no necesariamente será la misma
// plataforma donde PHP se encuentra ejecutándose:
//
echo PHP_OS;
//
// para obtener una información más confiable y detallada:
//
echo php_uname();
Vemos que tenemos dos alternativas, usando la constante predefinida de PHP llamada
PHP_OS
o usando la función
php_uname()
.
Detectar el sistema operativo del cliente
Conocer el
sistema operativo que usa un visitante o usuario a nuestra aplicación web, se puede efectuar desde PHP usando un código un algo más extenso al anterior:
<?php
// obteniendo el 'user_agent':
//
if ( isset( $_SERVER ) ) {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
} else {
global $HTTP_SERVER_VARS;
if ( isset( $HTTP_SERVER_VARS ) ) {
$user_agent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
} else {
global $HTTP_USER_AGENT;
$user_agent = $HTTP_USER_AGENT;
}
}
//
//
function getOS() {
global $user_agent;
$os_array = array(
'/windows nt 10/i' => 'Windows 10',
'/windows nt 6.3/i' => 'Windows 8.1',
'/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'
);
//
$os_platform = "Unknown OS Platform";
foreach ($os_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$os_platform = $value;
}
}
return $os_platform;
}
//
//
function getBrowser() {
global $user_agent;
$browser_array = array(
'/msie/i' => 'Internet Explorer',
'/firefox/i' => 'Firefox',
'/safari/i' => 'Safari',
'/chrome/i' => 'Chrome',
'/edge/i' => 'Edge',
'/opera/i' => 'Opera',
'/netscape/i' => 'Netscape',
'/maxthon/i' => 'Maxthon',
'/konqueror/i' => 'Konqueror',
'/mobile/i' => 'Handheld Browser'
);
$browser = "Unknown Browser";
foreach ($browser_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$browser = $value;
}
}
return $browser;
}
//
// Iniciando la ejecución de las funciones anteriores:
//
$user_os = getOS();
$user_browser = getBrowser();
$device_details = "<strong>Browser: </strong>" . $user_browser .
"<br /><strong>Operating System: </strong>" . $user_os;
print_r($device_details);
echo("<br /><br /><br />" . $_SERVER['HTTP_USER_AGENT']);
?>
La verdad es que obtenemos más que sólo el
sistema operativo del visitante a nuesta web, sino que conseguimos:
-
Navegador web que usa el visitante.
-
Detalles más específicos del navegador.
- El Motor interno que emplea el navegador.
- Y el Sistema Operativo del dispositivo que usa el visitante.
Todo lo anterior, basicamente usando algo más a las
variables de servidor disponibles en PHP.
Conclusión
Sin duda, conocer las características de
hardware y software de nuestro visitante, nos permite avanzar en el
grado de personalización que podemos agregar a nuestra aplicación web. Y disponer del código que realice esta tarea es un útil recurso en nuestro
arsenal de snippets como programador, evitando tener que programar la funcionalidad una y otro vez (
DRY).
Otras referencias