Wer seine Besucher automatisch auf eine mobile Version seiner Website weiterleiten möchte oder bei einem Newssystem anzeigen lassen möchte, ob man z.B. von einem Handy gepostet hat, möchte ein sicheres System, das auch jedes Gerät erkennt. Eine häufig verwendete PHP-Funktion ist hierzu get_browser(), die eine Datenbank namens browscap.ini verwendet.

Als Erstes müssen wir unseren Server bzw. Webspace konfigurieren. PHP muss gewissermaßen wissen, wo sich diese Datenbank (browscap.ini) befindet.

Dabei gibt es zwei Vorgehensweisen: Die erste beschreibt alle nötigen Änderungen, wenn man Zugriff auf die php.ini hat, die PHP genau konfiguriert. Bei den meisten Webhosting-Anbietern hat man auf diese keinen Zugriff, bei wenigen kann man sie teilweise bearbeiten bzw. ergänzen. Für Fortgeschrittene: Bei der Einstellung browscap ist es nicht möglich, über eine .htaccess-Datei den Wert anzupassen. Die zweite Vorgehensweise ist empfehlenswert, wenn man keinen Zugriff auf die php.ini hat.

1) Wenn ihr also Zugriff auf die php.ini habt, müsst ihr die Zeilen

  1. [browscap]
  2. browscap = 'Pfad zur browscap.ini samt Dateiname und Endung';

hinzufügen. Wenn sich diese Zeilen schon in eurer php.ini befinden, braucht ihr nichts bzw. nur den Pfad zur Datei ändern.

Zusätzlich müsst ihr dann noch die eine browscap.ini - also "Datenbank" - hochladen, es sei denn ihr habt bereits eine auf eurem Server. Aktuelle browscap.ini-Dateien findet ihr unter http://browsers.garykeith.com/downloads.asp. Achtet darauf, dass ihre eine PHP-Version der Datenbank verwendet.

2) Wenn ihr keinen Zugriff auf die php.ini habt, gibt es auch alternative Lösungen, eine davon stellen wir kurz vor. Hierbei wird die PHP-Funktion get_browser() durch eine selbstständige Funktion namens get_browser_local() ersetzt, die gleich funktioniert.

Erstellt die Datei php-local-browscap.php mit dem Inhalt dieser Datei: http://alexandre.alapetite.fr/doc-alex/php-local-browscap/php-local-browscap.php.txt. Genaueres zu dieser Alternativ-Funktion von Alexandre Alapetite gibt's unter http://alexandre.alapetite.fr/doc-alex/php-local-browscap/index.en.html.

Zusätzlich müsst ihr dann noch die eine browscap.ini - also "Datenbank" - hochladen, es sei denn ihr habt bereits eine auf eurem Server. Aktuelle browscap.ini-Dateien findet ihr unter http://browsers.garykeith.com/downloads.asp. Achtet darauf, dass ihre eine PHP-Version der Datenbank verwendet.

Werbung

Werbeblocker aktiv?

Vermutlich aufgrund eines Werbeblockers kann an dieser Stelle leider keine Werbung angezeigt werden. Als Blog ist diese Website jedoch darauf angewiesen, um diverse Kosten abdecken zu können. Vielleicht möchtest du Servaholics ja in deinem Werbeblocker als Ausnahme hinzufügen und so unterstützen? 🙂

Nun kommen wir zum eigentlichen Script. In diesem Beispiel wird geprüft, ob man vom PC aus die Seite besucht oder von einem mobilen Gerät (Handy, Smartphone etc.).

Beispiel für Vorgehensweise 1:

  1. $browser = get_browser(null, true);
  2. if($browser['ismobiledevice'] == '1') {
  3. echo "Handy-Web";
  4. } else {
  5. echo 'Web';
  6. }

Für Vorgehensweise 2 sieht der Code etwas anders aus, da wir die php-local-browscap.php laden müssen. Beispiel:

  1. require_once('php-local-browscap.php');
  2. $browser = get_browser_local(null, true);
  3. if($browser['ismobiledevice'] == '1') {
  4. echo "Handy-Web";
  5. } else {
  6. echo 'Web';
  7. }

Anstatt der Ausgabe von Handy-Web oder Web kann man natürlich auch eine Weiterleitung zur mobilen Seite einfügen oder jede andere erdenkliche Funktion ausführen, je nachdem was ihr vorhabt.

Wenn man jetzt noch anzeigen möchte Welches System der Besucher benutzt kann dies Folgendermaßen tun:

  1. if($browser['ismobiledevice'] == '1') {
  2. 	if($browser['platform'] == "BlackBerry OS") {
  3. 		echo "BlackBerry";
  4. 	} elseif($browser['platform'] == "iPhone OSX") {
  5. 		echo "iPhone";
  6. 	} elseif($browser['platform'] == "Android") {
  7. 		echo "Android";
  8. 	} else {
  9. 		echo "Handy-Web";
  10. 	}
  11. } else {
  12. 	echo 'Web';
  13. }

Dieses Beispiel gibt z.B. iPhone aus, wenn man die Seite über ein iPhone, iPod oder iPad aufruft; wird das verwendete System nicht gefunden, wird Handy-Web angezeigt. Natürlich könnt ihr noch weitere Systeme hinzufügen, das gleiche gilt natürlich auch für die PC-Systeme.

Update 26. Januar 2011 von Chris:

Nachdem @AsgarSerran noch einen kleineren "Bug" bzgl. nicht erkannten Browsern gemeldet hat, möchte ich hier noch eine Erweiterung vorschlagen. Sofern ein Browser nicht erkannt wird, weil er bspw. brandneu ist, hat die Variable $browser['browser'] den Wert Default Browser. Bevor man daher $browser['ismobiledevice'] bzw. $browser['platform'] überprüft, wäre eine Abfrage dieser Browser-Variable nützlich.

Für unser Beispiel ist der "resultierende Fehler" aus dem Nicht-Einfügen einer solchen Abfrage nicht fatal, da $browser['ismobiledevice'] zwar leer, jedoch damit schlichtweg genauso wie der Wert 0 ungleich 1 ist, der Browser wird also standardmäßig als "Web" erkannt.

Über den Autor:

Andere Beiträge, die auf diesen Beitrag verlinken

Deine Meinung zu diesem Artikel?


4 Kommentare zu "PHP: Handy oder PC?" (RSS)

Sehr interessant und hilfreich. Danke 🙂.
True?
Array
(
[browser_name_regex] => §^.*$§
[browser_name_pattern] => *
[browser] => Default Browser
[version] => 0
[majorver] => 0
[minorver] => 0
[platform] => unknown
[alpha] =>
[beta] =>
[win16] =>
[win32] =>
[win64] =>
[frames] => 1
[iframes] =>
[tables] => 1
[cookies] =>
[backgroundsounds] =>
[cdf] =>
[vbscript] =>
[javaapplets] =>
[javascript] =>
[activexcontrols] =>
[isbanned] =>
[ismobiledevice] =>
[issyndicationreader] =>
[crawler] =>
[cssversion] => 0
[supportscss] =>
[aol] =>
[aolversion] => 0
)
Browser nicht erkannt, habe mal den Artikel um einen Kommentar dazu erweitert 😉
Traf in meinem Fall zwar nicht zu.
Sooo brandaktuell sind die nämlich auch nicht.

Getestet in:
Chromium 8 (Iron)
Firefox 4 (Beta 9 und 10)
Firefox 3.6.13
Safari 5.0.2
Opera 11 (Und 11.01)

Wobei ich festgestellt hab, dass mein XAMPP irgendwie sowieso probleme mit Änderungen in der php.ini hat. Werde mich diesbezüglich vielleicht nochmal dazu melden, wenn es bei mir funktioniert.
Wollte nämlich schon die php.ini Variante durchführen.