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.
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.
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
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);
}
}
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 ...
)
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
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.