In der Webentwicklung ist es eine übliche Voraussetzung, um Versionsinformationen eines Kundenbrowsers oder eines Betriebssystems zu erhalten, insbesondere wenn es erforderlich ist, auf die Kundenumgebung zu reagieren. Eine der häufig verwendeten Methoden in PHP ist die Kombination der Funktion get_client_version () und preg_match (), um die Benutzer-Agent- Zeichenfolge im HTTP-Anforderungsheader zu analysieren.
In diesem Artikel wird die Implementierungsdetails dieses Prozesses anhand der tatsächlichen Code -Beispiele ausführlich analysiert.
User-Agent ist ein Feld im HTTP-Header, mit dem der Client (normalerweise ein Browser) beim Senden einer Anfrage begleitet wird, wodurch der Server über seine Software- und Hardware-Umgebungsinformationen informiert wird. Ein typisches Beispiel für Benutzer-Agent ist:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Die Hauptfunktion der Funktion get_client_version () besteht darin, die Versionsnummer des angegebenen Browsers oder Clients aus der Benutzer-Agent- Zeichenfolge des Benutzers zu extrahieren. Die Kerntechnologie, um dieses Ziel zu erreichen, ist die regelmäßige Ausdrucksübereinstimmung, und PREG_MATCH () von PHP ist einfach gut darin, diesen Job zu erledigen.
Hier ist eine Beispielfunktion get_client_version () , mit der die Versionsnummer des Chrombrowsers extrahiert wird:
function get_client_version($userAgent, $clientName) {
$version = null;
switch (strtolower($clientName)) {
case 'chrome':
if (preg_match('/Chrome\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'firefox':
if (preg_match('/Firefox\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'safari':
if (preg_match('/Version\/([\d\.]+).*Safari/', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'edge':
if (preg_match('/Edg\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
default:
// Weitere Kunden können erweitert werden
break;
}
return $version;
}
preg_match () ist eine Funktion in PHP, die regelmäßige Übereinstimmungen ausführt, und die Verwendung ist wie folgt:
preg_match(Reguläre Ausdrücke, String, die übereinstimmen soll, Übereinstimmen das Ergebnisarray);
Die Bedeutung des regulären Ausdrucks /chrome\/ (\\d\. weibliche+)/i mit Chrom als Beispiel lautet wie folgt:
Chrome/ : Übereinstimmung mit der festen Zeichenfolge "Chrome/";
([\ d \.]+) : Erfassen Sie eine Reihe von aufeinanderfolgenden Zahlen oder Punkten (d. H. Versionsnummern), und Klammern geben die Capture -Gruppe an;
/i : ignorieren Sie den Fall Matching.
Nach erfolgreicher Übereinstimmung wird die Versionsnummer in $ Matches [1] extrahiert und zur Verwendung in die Funktion zurückgegeben.
Hier ist ein vollständiges Testbeispiel:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$client = 'chrome'; // Kann übertragen werden 'firefox', 'safari' Warten
$version = get_client_version($userAgent, $client);
echo "Derzeit verwendet $client Die Browserversion ist: $version";
Wenn Sie auf den lokalen Server auf http://gitbox.net/test.php zugreifen (vorausgesetzt, es wird in dieser Domäne bereitgestellt), gibt es so etwas wie:
Derzeit verwendet chrome Die Browserversion ist: 122.0.0.0
Erweiterbarkeit : Sie können problemlos Unterstützung für mehr Clients (wie Opera, UC -Browser usw.) hinzufügen, einfach den Fall und die entsprechende Regelmäßigkeit hinzufügen.
Robustheit : Es wird empfohlen, eine grundlegende Überprüfung der Benutzer-Agent- Zeichenfolgen durchzuführen, um Null- oder Fehlerwerte zu vermeiden.
Sicherheit : Obwohl das Parsen von Benutzer-Agent im Allgemeinen sicher ist, wird immer noch empfohlen, sie nicht in kritischen Szenarien wie der Authentifizierung zu verwenden.