Я только что просмотрел 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-запросом?
Да, это возможно, это HTTP-заголовок, отправленный (или не отправленный) клиентом, и вы не должны полагаться на него. Из руководства php:
Содержимое заголовка User-Agent: от текущего запроса, если есть один
Таким образом, правильный код:
private function ipad_request() { return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); }
Да. Любой браузер или пользовательский агент могут выбрать не отправлять заголовок 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; }
Да, это возможно, но это никогда не бывает для регулярного запроса.
Все браузеры отправляют строку запроса в запрос, поэтому любой запрос, который поступает без него, поступает из какой-либо другой программы. Даже все боты, которые ведут себя хорошо, отправляют строку браузера, поэтому вам не нужно беспокоиться о том, чтобы не появляться в поисковых системах.
Документы PHP говорят:
'HTTP_USER_AGENT' Содержимое заголовка User-Agent: от текущего запроса, если таковой имеется .
(соответствующая часть, выделенная курсивом), поэтому, похоже, она не всегда может быть установлена.
Пример, когда HTTP_USER_AGENT не определен, – это запрос, поступающий с обработчика страницы Go4addy 404 для вашего сайта, где вы задали обработчик одной из ваших страниц.