2009-08-25 6 views
4

Basierend auf this sieht es so aus, als ob es schwierig ist, OS-Versionserkennung absolut richtig zu bekommen. Ich suche jedoch nach etwas halbwegs Anständigem, das Benutzer von OS X Tiger und darunter über mögliche Kompatibilitätsprobleme mit meinem Produkt warnt.Erkennen OS X Version 10.4 und niedriger auf Server

Die Heuristik, die ich mir vorstellen kann, ist zunächst festzustellen, ob das Betriebssystem ein Mac ist (relativ einfach) und dann den Benutzer-Agent mit der Regex 10[/._][0-4] zu Tiger und darunter zu erkennen. Ich interessiere mich nicht wirklich für Fälle, in denen der Benutzer-Agent geändert wird - ich möchte eine faire Trefferquote bei der Erkennung von OS X-Versionen, nicht eine 100% ige Lösung.

Weitere Vorschläge/Empfehlungen?

Auch Bonuspunkte für das Zeigen auf ein Werkzeug, das mir dabei hilft, dies zu testen, indem Sie bekannte User-Agent-Zeichenfolgen für verschiedene OS-Version + Browser-Versionskombinationen generieren.

Danke!

+0

Scheint, wie ich einen Teil Ihrer Frage falsch verstanden, da ich nicht ein Mac-Benutzer bin Stört es Sie einige Beispiel-User-Agent-Zeichenfolgen (zum Beispiel Safari und Firefox auf dem Mac). –

+0

Safari: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/530.18 (KHTML, wie Gecko) Version/4.0.1 Safari/530.18 FF: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; de-US; rv: 1.9.1.2) Gecko/20090729 Firefox/3.5.2 – psychotik

+0

Habe gerade meine Antwort bearbeitet. –

Antwort

1

Humm, glaube ich, dass bis heute php_browscap.ini mit einem bis die get_browser() Funktion ist die klügste Wahl in dieser Fall, nicht 100% sicher, ob es Ihnen die Betriebssystemversion jedoch sagen wird.

BEARBEITEN: Die Datei browscap.ini bietet Ihnen auch genügend User-Agent-Zeichenfolgen, wenn Sie sich immer noch dafür entscheiden, die Analyse selbst durchzuführen.

BEARBEITEN: Scheint, dass there is also a PHP implementation, dass Sie die php.ini-Datei nicht ändern müssen.

EDIT: Basierend auf dem String-User-Agenten Sie mir hier zur Verfügung gestellt ist der Code, den ich am besten funktioniert, glaube:

if (preg_match('~Mac OS X (.*?);~', $_SERVER['HTTP_USER_AGENT'], $matches) > 0) 
{ 
    $version = preg_replace('~[^0-9]+~', '.', trim($matches[1])); 

    if (version_compare($version, '10.5', '>=') === true) 
    { 
     // ok 
    } 

    else 
    { 
     // not ok 
    } 
} 

else 
{ 
    // not Mac OS X 
} 
+0

Das würde gut für die Windows-Client-Version funktionieren - nicht so sehr für Mac OS-Versionen, außer wenn ich etwas mache, das dem ähnlich ist, was ich oben geschrieben habe. Danke - Ich wusste nichts über diese sehr nette PHP-Funktion. – psychotik

+0

In der Tat, aber ich denke, wenn Sie die Funktion version_compare() zusammen mit dem Versionsindex von get_browser() verwenden, werden Sie wahrscheinlich weniger Fehler machen, wenn Sie nur einen Regex-Ansatz verwenden. –

0

Weitere Vorschläge oder Empfehlungen?

Ja, tun Sie es nicht. Nicht vielleicht, was du hören willst, aber du hast Recht, es ist bestenfalls unzuverlässig.

Da ich von Natur aus faul war, entschied ich mich für die Lösung, die am wenigsten Arbeit erforderte. Das ist ein großer roter Textbereich neben dem Download-Link, der etwas wie folgt lautet:

Vorsicht. Dieses Produkt wird nur mit OS X 10.5 oder höher unterstützt. Bitte versuchen Sie nicht mit früheren Versionen zu verwenden.

Dann lassen Sie den Benutzer entscheiden.

Wenn Sie sie weiter schützen möchten, lassen Sie Ihr ausführbares Programm sich selbst überprüfen, sobald es auf ihrer Box läuft. Ich nehme an, OS X hat uname darauf, oder ein ähnliches Tool, das die Betriebssystemversion zuverlässig erhalten kann. Wenn es zu diesem Zeitpunkt die Spezifikationen nicht erfüllt, können Sie einfach mit einer ähnlichen Meldung beenden:

Ich warnte Sie. Aber nein, du würdest nicht zuhören. Musste mich sowieso runterladen, nicht wahr? Nun, jetzt werde ich überhaupt nicht mehr rennen und du hast all diese wertvolle Bandbreite verschwendet. Dummer, dummer Mann, geh jetzt weg.

Natürlich Ihre Fehlermeldung taktvoller sein kann als meine :-)

+0

Leider wird meine App nicht einmal vor Leopard geladen, so dass der Fehler beim ersten Lauf den viel schmerzhafteren Pfad des Bootstrappings meiner App in einem 10.4 kompatiblen Launcher beinhaltet. Blech! Und ich vertraue flockige Erkennung über Benutzer Intelligenz. Viele Leute, die mit OS X arbeiten, haben keine Ahnung, welche Version sie ausführen. Mutiger roter Text, der sie warnt, dies nicht mit älteren Versionen als "Foo" zu verwenden, wird sie nur einschüchtern, glaube ich. – psychotik