Ist es möglich für $_SERVER[‘HTTP_USER_AGENT’] nicht eingestellt werden?
Lesezeit: 2 Minuten
Martin Bean
Ich habe gerade eine Website durchsucht error_log und einer der Fehler, der einige Male protokolliert wurde, ist:
[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130
Die Zeile, auf die sich dies bezieht, in toro.php ist:
private function ipad_request() {
return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
Ist es möglich für $_SERVER['HTTP_USER_AGENT'] nicht durch eine HTTP-Anfrage gesetzt werden?
Maxim Krizhanovsky
Ja, es ist möglich, dass dies ein vom Client gesendeter (oder nicht gesendeter) HTTP-Header ist, und Sie sollten sich nicht darauf verlassen. Aus dem PHP-Handbuch:
Inhalt des User-Agent: Header aus der aktuellen Anfrage, falls vorhanden
Der richtige Code wäre also:
private function ipad_request() {
return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
Andreas Moore
Ja. Jeder Browser oder Benutzeragent kann sich dafür entscheiden, die nicht zu senden User-Agent Header. Wenn sie diesen Header nicht senden, $_SERVER['HTTP_USER_AGENT'] wird nicht eingestellt.
Verwenden isset() um sicherzustellen, dass $_SERVER['HTTP_USER_AGENT'] eingestellt ist.
Ja, es ist möglich, aber es passiert nie bei einer regulären Anfrage.
Alle Browser senden in der Anfrage eine Browserzeichenfolge, sodass jede Anfrage, die ohne eine ankommt, von einem anderen Programm stammt. Selbst alle gut benommenen Bots senden einen Browser-String, sodass Sie sich keine Sorgen machen müssen, auch nicht in Suchmaschinen angezeigt zu werden.
PHP-Dokumentation sagt:
‘HTTP_USER_AGENT’ Inhalt des User-Agent: Header aus der aktuellen Anfrage, wenn es einen gibt.
(entsprechender Teil kursiv), so dass es den Anschein hat, dass es nicht immer eingestellt ist.
Ein Beispiel, bei dem HTTP_USER_AGENT nicht definiert ist, ist, wenn die Anfrage vom 404-Seiten-Handler von GoDaddy für Ihre Website kommt, wo Sie den Handler als eine Ihrer Seiten festgelegt haben.
14057000cookie-checkIst es möglich für $_SERVER[‘HTTP_USER_AGENT’] nicht eingestellt werden?yes