Aktueller Standort: Startseite> Neueste Artikel> So capsuliert eine erweiterte Version der Toolklasse get_client_version

So capsuliert eine erweiterte Version der Toolklasse get_client_version

gitbox 1970-01-01

In der Webentwicklung ist das Erhalten von Client -Versionsinformationen (z. B. Browser, Betriebssystem, Gerätetyp usw.) eine häufigste Anforderung. Unabhängig davon, ob es zur statistischen Analyse, zur Beurteilung des funktionalen Kompatibilität oder zur personalisierten Anzeige verwendet wird, kann die genaue Identifizierung der Kundenumgebung die Benutzererfahrung erheblich verbessern.

$ _Server ['http_user_agent'] von PHP liefert grundlegende Clientinformationen, aber es ist nicht einfach. Um diese Aufgabe effizienter und bequemer zu gestalten, können wir eine leistungsstärkere Tool -Klasse von GET_CLIENT_VERSION -Funktionen zusammenfassen, um Browser, Betriebssysteme, Gerätetypen und sogar App -Versionen automatisch zu identifizieren.

1. Warum müssen Verpackungen durchgeführt werden?

Die direkte Verwendung der ursprünglichen Benutzer-Agent-Zeichenfolge hat die folgenden Schmerzpunkte:

  • Das String -Format ist nicht einheitlich und Parsingregeln sind kompliziert

  • Die Browser- und Betriebssystemversionen werden häufig aktualisiert, und die Erkennungsmethode ist häufig ungültig

  • Mangelnde Flexibilität und Skalierbarkeit, es ist schwierig, mit den multi-terminalen Anwendungsbedürfnissen fertig zu werden

Um diese Probleme zu überwinden, benötigen wir eine strukturierte, modulare und erweiterbare Werkzeugklasse.

2. Tool Design -Ideen

Wir planen, eine ClientVersionHelper -Klasse mit den folgenden Funktionen zu erstellen:

  • Identifizieren Sie automatisch Browsertypen und -versionen (Chrom, Firefox, Safari usw.)

  • Identifizieren Sie automatisch das Betriebssystem und die Version (Windows, MacOS, Linux, Android, iOS).

  • Stellen Sie fest, ob es sich um ein mobiles Gerät handelt

  • Unterstützt die kundenspezifische Anerkennung von Anwendungsversionen (z. B. das UA-Format selbst entwickelter Apps)

  • Geben Sie ein einheitliches strukturiertes Return -Format an

A. Code -Implementierung

Das Folgende ist eine grundlegende Implementierung, die Sie in Zukunft nach den Projektanforderungen weiter ausbauen können:

 <?php

class ClientVersionHelper
{
    protected $userAgent;

    public function __construct($userAgent = null)
    {
        $this->userAgent = $userAgent ?: ($_SERVER['HTTP_USER_AGENT'] ?? '');
    }

    public function getClientInfo()
    {
        return [
            'browser' => $this->getBrowser(),
            'os'      => $this->getOS(),
            'device'  => $this->isMobile() ? 'Mobile' : 'Desktop',
            'raw'     => $this->userAgent,
        ];
    }

    protected function getBrowser()
    {
        $ua = $this->userAgent;

        if (preg_match('/Chrome\/([0-9\.]+)/i', $ua, $matches)) {
            return 'Chrome ' . $matches[1];
        }

        if (preg_match('/Firefox\/([0-9\.]+)/i', $ua, $matches)) {
            return 'Firefox ' . $matches[1];
        }

        if (preg_match('/Safari\/([0-9\.]+)/i', $ua) && !preg_match('/Chrome/i', $ua)) {
            return 'Safari';
        }

        if (preg_match('/MSIE ([0-9\.]+)/i', $ua, $matches)) {
            return 'Internet Explorer ' . $matches[1];
        }

        return 'Unknown';
    }

    protected function getOS()
    {
        $ua = $this->userAgent;

        if (preg_match('/Windows NT ([0-9\.]+)/i', $ua, $matches)) {
            return 'Windows ' . $matches[1];
        }

        if (preg_match('/Mac OS X ([0-9_\.]+)/i', $ua, $matches)) {
            return 'macOS ' . str_replace('_', '.', $matches[1]);
        }

        if (preg_match('/Android ([0-9\.]+)/i', $ua, $matches)) {
            return 'Android ' . $matches[1];
        }

        if (preg_match('/iPhone OS ([0-9_]+)/i', $ua, $matches)) {
            return 'iOS ' . str_replace('_', '.', $matches[1]);
        }

        if (preg_match('/Linux/i', $ua)) {
            return 'Linux';
        }

        return 'Unknown';
    }

    protected function isMobile()
    {
        return preg_match('/Mobile|Android|iPhone|iPad/i', $this->userAgent);
    }
}

4. Verwenden Sie Beispiele

Strukturierte Client -Versionsinformationen werden nur mit einem einfachen Anruf erhalten:

 $clientHelper = new ClientVersionHelper();
$info = $clientHelper->getClientInfo();

echo '<pre>';
print_r($info);
echo '</pre>';

Das Beispiel des Rückgabeergebnisses lautet wie folgt:

 Array
(
    [browser] => Chrome 120.0.0.0
    [os] => Windows 10.0
    [device] => Desktop
    [raw] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
)

5. Vorschläge zur Erweiterungsrichtung

Sie können der vorhandenen Grundlage folgende Erweiterungen hinzufügen:

  • Fügen Sie Unterstützung für benutzerdefinierte UA -Kennungen wie MyApp/3.4.5 in Ihrer eigenen App UA hinzu

  • Integrieren Sie UA-Datenbanken (z. B. https://gitbox.net/ua-database ), um mehr Geräteerkennung zu unterstützen

  • Bereitstellung eines Caching -Mechanismus zur Verbesserung der Verarbeitungseffizienz

  • In ein Composer -Paket in ein Composer -Paket zusammenfassen, um eine einfache Wiederverwendung und Aktualisierung zu erhalten

6. Schlussfolgerung

Die Einkapselung einer effizienten Get_Client_Version -Toolklasse kann nicht nur die vom Client erkannte Codelogik erheblich vereinfachen, sondern auch Ihre Anwendung aufrechterhalten und skalierbarer. Anstatt das Benutzer-Agent jedes Mal manuell zu analysieren, ist es besser, es einer leistungsstarken und zuverlässigen Werkzeugklasse zu überlassen, um damit umzugehen.

Mit der zunehmenden Anzahl von Geräte- und Browsertypen hält ein gutes Paket Ihr Projekt im Vordergrund der Benutzererkennung.