Подтвердить что ты не робот

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

Я только просматривал веб-сайт 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-запросом?

4b9b3361

Ответ 1

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

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

Итак, правильный код:

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

Ответ 2

Да. Любой браузер или пользовательский агент может выбрать не отправлять заголовок 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;
}

Ответ 3

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

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

Ответ 4

В документах PHP говорится:

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

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

Ответ 5

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