php - request_uri - ¿Es posible que $_SERVER[''HTTP_USER_AGENT''] no se establezca?
php server url (5)
PHP docs dice:
''HTTP_USER_AGENT'' Contenido del encabezado User-Agent: de la solicitud actual, si existe .
(parte relevante en cursiva) por lo que parece que no siempre se puede configurar.
Acabo de ver el error_log
un sitio web y uno de los errores que se han registrado varias veces es:
[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130
La línea a la que pertenece en toro.php es:
private function ipad_request() {
return strstr($_SERVER[''HTTP_USER_AGENT''], ''iPad'');
}
¿Es posible que $_SERVER[''HTTP_USER_AGENT'']
no se establezca mediante una solicitud HTTP?
Sí, es posible, este es un encabezado HTTP enviado (o no enviado) por el cliente, y no debe confiar en él. Desde el manual de php:
Contenido del User-Agent: encabezado de la solicitud actual, si hay uno
Entonces el código correcto sería:
private function ipad_request() {
return isset($_SERVER[''HTTP_USER_AGENT'']) && strstr($_SERVER[''HTTP_USER_AGENT''], ''iPad'');
}
Sí, es posible, pero nunca sucede para una solicitud regular.
Todos los navegadores envían una cadena de navegador en la solicitud, por lo que cualquier solicitud que llegue sin una proviene de algún otro programa. Incluso todos los bots que se comportan bien envían una cadena de navegador, por lo que tampoco tiene que preocuparse por no aparecer en los motores de búsqueda.
Sí. Cualquier navegador o usuario-agente puede elegir no enviar el encabezado User-Agent
. Si no envían ese encabezado, $_SERVER[''HTTP_USER_AGENT'']
no se configurará.
Use isset()
para asegurarse de que $_SERVER[''HTTP_USER_AGENT'']
esté establecido.
private function ipad_request() {
if(!isset($_SERVER[''HTTP_USER_AGENT''])) return false;
return strstr($_SERVER[''HTTP_USER_AGENT''], ''iPad'') !== false;
}
Un ejemplo en el que HTTP_USER_AGENT no está definido es si la solicitud proviene del controlador de página 404 de GoDaddy para su sitio donde ha configurado el controlador como una de sus páginas.