Ist es möglich für $_SERVER[‘HTTP_USER_AGENT’] nicht eingestellt werden?

Lesezeit: 2 Minuten

Benutzeravatar von Martin Bean
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?

Benutzeravatar von Maxim Krizhanovsky
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');
}

Benutzeravatar von Andrew Moore
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.

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

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

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.

1405700cookie-checkIst es möglich für $_SERVER[‘HTTP_USER_AGENT’] nicht eingestellt werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy