Is it possible for $_SERVER['HTTP_USER_AGENT'] to not be set?
Asked Answered
L

5

29

I've just been looking through a website's error_log and one of the error's that has been logged a few times is:

[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130

The line this pertains to in toro.php is:

private function ipad_request() {
    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}

Is it possible for $_SERVER['HTTP_USER_AGENT'] to not be set by a HTTP request?

Leopoldine answered 24/6, 2011 at 8:43 Comment(0)
B
30

Yes, it's possible, this a HTTP header sent (or not sent) by client, and you should not rely on it. From php manual:

Contents of the User-Agent: header from the current request, if there is one

So the correct code would be:

private function ipad_request() {
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
Baleen answered 24/6, 2011 at 8:45 Comment(0)
L
9

Yes. Any browser or user-agent can choose not to send the User-Agent header. If they do not send that header, $_SERVER['HTTP_USER_AGENT'] won't be set.

Use isset() to ensure that $_SERVER['HTTP_USER_AGENT'] is set.

private function ipad_request() {
  if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;

  return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false;
}
Lingcod answered 24/6, 2011 at 8:46 Comment(0)
D
5

Yes, it's possible, but it never happens for a regular request.

All browsers do send a browser string in the request, so any request that arrives without one comes from some other program. Even all well-behaving bots send a browser string, so you don't have to be concerned about not showing up in search engines either.

Dagoba answered 24/6, 2011 at 8:50 Comment(0)
W
2

PHP docs says:

'HTTP_USER_AGENT' Contents of the User-Agent: header from the current request, if there is one.

(relevant part italicised) so it would appear it might not always be set.

Worldlywise answered 24/6, 2011 at 8:47 Comment(0)
O
1

An example where HTTP_USER_AGENT is undefined is if the request coming from GoDaddy's 404 page handler for your site where you have set the handler to be one of your pages.

Overland answered 17/5, 2013 at 18:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.