Возможно ли не установить $ _SERVER ['HTTP_USER_AGENT']? - PullRequest
24 голосов
/ 24 июня 2011

Я только что просматривал error_log веб-сайта, и одна из ошибок, которая была зарегистрирована несколько раз:

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

Строка, к которой это относится в toro.php :

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

Возможно ли, что $_SERVER['HTTP_USER_AGENT'] не будет установлен HTTP-запросом?

Ответы [ 5 ]

25 голосов
/ 24 июня 2011

Да, возможно, это HTTP-заголовок, отправленный (или не отправленный) клиентом, и на него не следует полагаться.Из руководства php:

Содержимое User-Agent: заголовок текущего запроса, если есть один

Таким образом, правильный код будет:

private function ipad_request() {
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
7 голосов
/ 24 июня 2011

Да. Любой браузер или пользовательский агент может не отправлять заголовок User-Agent. Если они не отправят этот заголовок, $_SERVER['HTTP_USER_AGENT'] не будет установлен.

Используйте isset(), чтобы установить $_SERVER['HTTP_USER_AGENT'].

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

  return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false;
}
4 голосов
/ 24 июня 2011

Да, это возможно, но для обычного запроса этого не происходит.

Все браузеры отправляют строку запроса в запросе, поэтому любой запрос, поступающий без запроса, поступает из какой-либо другой программы. Даже все боты с хорошим поведением отправляют строку браузера, поэтому вам не нужно беспокоиться о том, что они не появятся в поисковых системах.

2 голосов
/ 24 июня 2011

PHP документов говорит:

'HTTP_USER_AGENT' Содержимое User-Agent: заголовок текущего запроса, , если есть один .

(соответствующая часть выделена курсивом), поэтому может показаться, что он не всегда может быть установлен.

1 голос
/ 17 мая 2013

Пример, где HTTP_USER_AGENT не определен, - это если запрос от обработчика страниц 404 GoDaddy для вашего сайта, где вы установили обработчик как одну из ваших страниц.

...