PHP Script erkennt normale Browser plötzlich als Mobileversion

C

Cave Johnson

Gast
Hi,

ich verwende seit langem ein Script, um Mobilvarianten von Browsern zu detektieren und dann auf die Mobilversion meiner Homepage umzuleiten.

Seit heute erkennt das Script aber plötzlich alle Browser als mobile. Es hat gestern definitiv noch funktioniert und ich habe seit dem nichts ander Seite geändert - trotzdem werd ich plötzlich umgeleitet.

Das Script sieht so aus:
PHP:
<?php ob_start("ob_gzhandler");
if(isset($_GET['nomobile'])) {
  setcookie("mobile","nomobile",time()+(3600*24*365));
} else {
  setcookie("mobile","",time() - 3600);
}

setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'); 
$cookie = $_COOKIE["mobile"];
if($cookie != "nomobile")
{
  require_once("browser.php");
  $browser = get_browser_local(null, true);
  if($browser['ismobiledevice'] == true)
  {
    header("Location: http://m.example.com/");
    exit();
  }
}
Die beiden darin verlinkten Dateien - browser.php und browser.ini - hab ich angehangen.

Es kann doch nicht sein, dass hier ohne eine Änderung das Script plötzlich nicht mehr wie gewünscht funktioniert :confused_alt: Hat jemand eine Idee, was da kaputt ist? Ich habe sicherheitshalber auch nochmal ein Backup von vorgestern aufgespielt - Problem besteht weiterhin.
 
Hab das jetzt nur mal überflogen und die Zeile
Code:
if(isset($_GET['nomobile'])) {
macht mich stutzig.

Das Skript erwartet demnach per GET einen Parameter "nomobile" und wenn der, woher auch immer er kommt, mal nicht da ist, wird automatisch angenommen, der Browser wäre eine mobile Variante.

Sieht für mich so aus, als würde auf deiner Indexseite ein JavaScript laufen, daß den Browsertyp ermittelt und dann einen Redirect auf dein PHP Skript durchführt und bei normalen Browsern den "nomobile" Parameter anhängt. Wenn das Skript jetzt nicht mehr sauber läuft, fehlt der Parameter und schon ist jeder Browser auf einmal ein mobiler.

Wäre zumindest eine Erklärung.
 
Browser hab ich alle unter Win 7 getestet, nen zweiten PC hab ich nicht hier aber aus der VM mit WinXP hab ichs probiert.



Von der mobilen Variante komme ich über einen Link dem dem Parameter nomobile auf die Standardseite zurück, damit Mobilgeräte eben nicht mehr per default umgeleitet werden.

Wenn der Parameter nicht gesetzt ist - damit wird das Cookie gelöscht - soll geprüft werden, ob es ein Mobilebrowser ist. Falls true, dann wird umgeleitet. Aber es werden eben auch Desktopbrowser umgeleitet.




edit: ich glaub, ich hab den Fehler - auch wenn ich nicht verstehe, warum es bisher geklappt hat.

if($browser['ismobiledevice'] == true) muss heißen if($browser['ismobiledevice'] === true); kann das sein? Zumindest klappt es.

In einem Backup von vor einem Jahr ist ebenfalls nur ein '==' vorhanden, kein '===', ich habe seit dem also nichts verändert und es hat in der Vergangenheit immer damit geklappt. Wieso heute nicht mehr?
 
Zuletzt bearbeitet:
Hat sich das Browsererkennungsskript geändert? "==" prüft halt nicht typ-sicher, was "===" macht.

Sprich
Code:
( 5 == true ) -> true
wohingegen
Code:
( 5 === true ) -> false

Oder hat sich die PHP Version auf dem Server geändert? Das mit dem "===" gibts meines Wissens erst seit PHP 5 oder so.

Kannst ja mal schauen, was in
Code:
$browser['ismobiledevice']
für nen mobilen und nicht mobilen Browser drinsteht. Dann klärt sich das vielleicht auf.
 
ein hoch auf schwache typisierung.
1337 == true -> wahr
1337 === true -> falsch
"bla" == true -> wahr
"bla === true -> falsch
 
KillerCow schrieb:
Oder hat sich die PHP Version auf dem Server geändert?
Könnte sein, hab aber keine Mail vom Hoster dazu bekommen. Ist vielleicht jemand bei Host Europe der dazu was weiß?

Kannst ja mal schauen, was in
Code:
$browser['ismobiledevice']
für nen mobilen und nicht mobilen Browser drinsteht. Dann klärt sich das vielleicht auf.
Das war in beiden Fällen korrekt - also Desktop = false, Mobile = true - aber davor hab wurde eben nicht korrekt geprüft und die Abfrage war immer == true.



Okay, sehe gerade, das FPDF auch Fehler schmeißt. Da hat sich wohl tatsächlich serverseitig was getan: Deprecated: Assigning the return value of new by reference is deprecated in fpdi.php on line 88

Na dann werd ich mal gucken, was sonst noch alles nicht mehr funktioniert :D
 
Zuletzt bearbeitet:
Ich hab die mail zig fach bekommen:
Sehr geehrte Damen und Herren,

wie Sie vielleicht wissen, wurde die ursprünglich für den 27.06.2012 angekündigte Umstellung auf PHP 5.3 zunächst auf unbestimmte Zeit verschoben, um Ihnen mehr Vorbereitungszeit für Ihre Projekte einzuräumen. Wir hatten Ihnen versprochen, dass wir einen neuen Termin mit mindestens 3 Wochen Vorlauf ankündigen werden. Aus diesem Grund möchten wir Sie nun mit diesem Newsletter über den neuen Termin informieren.

Am Mittwoch, den 05.09.2012, werden wir in der Zeit zwischen 07:00 Uhr und 9:00 Uhr Wartungsarbeiten durchführen.
 
Ah ja - hab noch eine alte Adresse in meinem Kundenprofil hinterlegt :freak:

Danke schön.
 
Zurück
Oben