2011-06-24 17 views
24

ja właśnie przeglądając stronę internetową na error_log i jednego błędu, że został zalogowany kilka razy jest:

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

Linia ta dotyczy w toro.php jest:

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

Czy jest możliwe, aby $_SERVER['HTTP_USER_AGENT'] nie było ustawione przez żądanie HTTP?

Odpowiedz

25

Tak, jest to możliwe, to nagłówek HTTP wysłany (lub nie wysłany) przez klienta i nie należy na nim polegać. Z podręcznika PHP:

zawartość User-agent: nagłówka z aktualnego zapytania, jeśli taki istnieje

Więc prawidłowy kod byłoby:

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

Tak. Każda przeglądarka lub użytkownik-agent może zdecydować, aby nie wysyłać nagłówka User-Agent. Jeśli nie wyślą tego nagłówka, $_SERVER['HTTP_USER_AGENT'] nie zostanie ustawione.

Użyj isset(), aby ustawić $_SERVER['HTTP_USER_AGENT'].

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

    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false; 
} 
2

PHP docs mówi:

'HTTP_USER_AGENT' Zawartość User-agent: Główka bieżącego żądania, Jeśli jest jedna.

(odpowiednia część z kursywą), więc wygląda na to, że nie zawsze może być ustawiona.

4

Tak, jest to możliwe, ale nigdy nie dzieje się tak w przypadku zwykłego żądania.

Wszystkie przeglądarki wysyłają w żądaniu ciąg przeglądarki, więc każde żądanie przychodzące bez niego pochodzi z innego programu. Nawet wszystkie dobrze zachowujące się boty wysyłają ciąg przeglądarki, więc nie musisz się martwić, że nie pojawią się w wyszukiwarkach.

1

Przykład, w którym HTTP_USER_AGENT jest niezdefiniowany, to żądanie pochodzące z 404 strony obsługi GoDaddy dla witryny, w której ustawiono program obsługi jako jedną ze stron.

Powiązane problemy