Dans le développement Web, il est courant d'obtenir des informations sur la version d'un navigateur client ou d'un système d'exploitation, en particulier lorsqu'il est nécessaire de répondre à l'environnement client. L'une des méthodes couramment utilisées en PHP est de combiner la fonction get_client_version () et preg_match () pour analyser la chaîne d'agent utilisateur dans l'en-tête de demande HTTP.
Cet article analysera les détails de mise en œuvre de ce processus en détail grâce à des exemples de code réels.
User-Agent est un champ dans l'en-tête HTTP que le client (généralement un navigateur) accompagnera lors de l'envoi d'une demande, informant le serveur de ses informations logicielles et d'environnement matériel. Un exemple d'agent utilisateur typique est:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
La fonction principale de la fonction get_client_version () consiste à extraire le numéro de version du navigateur ou du client spécifié de la chaîne d'utilisateur-agent de l'utilisateur. La technologie de base pour atteindre cet objectif est la correspondance de l'expression régulière, et PROG_Match () de PHP est tout simplement bon pour faire ce travail.
Voici un exemple de fonction get_client_version () , qui est utilisé pour extraire le numéro de version du navigateur Chrome:
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:
// Plus de clients peuvent être élargis
break;
}
return $version;
}
preg_match () est une fonction de PHP qui effectue une correspondance régulière, et son utilisation est la suivante:
preg_match(Expressions régulières, Chaîne à faire correspondre, Faites correspondre le tableau de résultat);
La signification de l'expression régulière /chrome \/ (ous \d\.
Chrome / : correspondez à la chaîne fixe "Chrome /";
([\ d \.] +) : Capture un ensemble de nombres ou de points consécutifs (c'est-à-dire les numéros de version), et les supports indiquent le groupe de capture;
/ i : ignorer la correspondance du cas.
Une fois le match réussi, le numéro de version sera extrait dans $ Matches [1] et retourné à la fonction d'utilisation.
Voici un exemple de test complet:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$client = 'chrome'; // Peut être transféré 'firefox', 'safari' attendez
$version = get_client_version($userAgent, $client);
echo "Actuellement utilisé $client La version du navigateur est: $version";
Lorsque vous accédez à http://gitbox.net/test.php sur le serveur local (en supposant qu'il est déployé dans ce domaine), si vous utilisez le navigateur Chrome, il sortira quelque chose comme:
Actuellement utilisé chrome La version du navigateur est: 122.0.0.0
Extensibilité : vous pouvez facilement ajouter un support pour plus de clients (tels que l'opéra, le navigateur UC, etc.), il suffit d'ajouter un cas et une régularité correspondante.
Robustesse : il est recommandé d'effectuer une vérification de base des chaînes d'agent utilisateur pour éviter les valeurs nulles ou d'erreur.
Sécurité : Bien que l'analyse de l'agent utilisateur soit généralement sûr, il est toujours recommandé de ne pas l'utiliser dans des scénarios critiques tels que l'authentification.