CakeFest 2024: The Official CakePHP Conference

Algo útil

Hagamos ahora algo que puede ser más útil. Vamos a comprobar qué tipo de navegador está utilizando el usuario visitante. Para hacerlo, vamos a comprobar el string del agente de usuario que el navegador envía como parte de la petición HTTP. Esta información es almacenada en una variable. En PHP, las variables siempre comienzan con un signo de dólar. La variable que nos interesa ahora es $_SERVER['HTTP_USER_AGENT'].

Nota:

$_SERVER es una variable especial reservada por PHP que contiene toda la información del servidor web. Es conocida como una superglobal. Consulte la página del manual sobre Superglobales para más información.

Para mostrar esta variable, se puede hacer simplemente:

Ejemplo #1 Imprimir una variable (elemento de array)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

Un ejemplo del resultado de este script podría ser:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Hay muchos tipos de variables en PHP. En el ejemplo anterior se muestra un elemento de un Array. Los arrays pueden ser muy útiles.

$_SERVER es simplemente una variable que se encuentra disponible automáticamente en PHP. Se puede encontrar una lista en la sección Variables reservadas del manual, o se puede obtener una lista completa observando la salida de la función phpinfo() usada en el ejemplo de la sección anterior.

Puede usar múltiples sentencias de PHP dentro de una etiqueta de PHP y crear pequeños bloques de código que realicen más que un simple 'echo'. Por ejemplo, si se quisiera detectar el uso de Internet Explorer, se podría hacer algo así:

Ejemplo #2 Ejemplo usando estructuras de control y funciones

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
echo
'Está usando Internet Explorer.<br />';
}
?>

Un ejemplo del resultado de este script sería:

Está usando Internet Explorer.<br />

Aquí hemos introducido un par de conceptos nuevos. Tenemos una sentencia if. Si está familiarizado con la sintaxis básica del lenguaje C, debería parecerle lógico. De lo contrario, probablemente debería conseguir un libro que le introduzca a PHP, y leer el primer par de capítulos, o leer la parte del manual titulada Referencia del lenguaje.

El segundo concepto que introducimos fue la función llamada a strpos(). strpos() es una función integrada en PHP que busca un string dentro de otro. En este caso estamos buscando 'MSIE' (también llamado aguja) dentro de $_SERVER['HTTP_USER_AGENT'] (también llamado pajar). Si el string se encuentra dentro del pajar, la función devuelve la posición de la aguja relativa al inicio del pajar. De lo contrario, devuelve false. Si no devuelve false, la expresión if se evalúa como true y se ejecuta el código entre llaves {}. De lo contrario, el código no será ejecutado. Tómese la libertad de crear ejemplos similares, con if, else, y otras funciones como strtoupper() y strlen(). Cada página del manual relacionada también contiene ejemplos. Si no está seguro de cómo usar estas funciones, es recomendable que lea las páginas del manual sobre Cómo interpretar una definición de función y la sección sobre Funciones de PHP.

Podemos dar un paso más y mostrar cómo se puede entrar y salir del modo PHP incluso en medio de un bloque de código de PHP:

Ejemplo #3 Mezcla de los modos HTML y PHP

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() debe haber devuelto no falso</h3>
<p>Está usando Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() debe haber devuelto falso</h3>
<p>No está usando Internet Explorer</p>
<?php
}
?>

Un ejemplo del resultado del script podría ser:

<h3>strpos() debe haber devuelto no falso</h3>
<p>Está usando Internet Explorer</p>

En vez de usar una sentencia echo de PHP para mostrar algo, salimos del modo PHP y enviamos solamente HTML. Este es un punto muy importante y potente que se ha de observar aquí, y es que la fluidez lógica del script permanece intacta. Solamente uno de los bloques HTML terminará siendo enviado al navegador dependiendo del resultado de strpos(). En otras palabras, depende de si el string MSIE fue encontrada o no.

add a note

User Contributed Notes 2 notes

up
185
Declan Kelly
9 years ago
Please note that Internet Explorer 11 no longer contains MSIE in its user agent string, for example on Windows 8 with IE11 I get the following:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

So if you want to include a test for IE11, the code above changes to:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
echo
'You are using Internet Explorer.<br />';
}
?>
up
-77
Evan Z
2 years ago
Hi. Edge is a different browser from IE. You cannot use the condition to judge it is an Internet Explorer. On the contrary, it means this is an Edge browser.

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE {
echo
'You are using Edge.<br />';
}
?>
To Top