Dans le développement Web, l'obtention d'informations sur la version client (telles que le navigateur, le système d'exploitation, le type d'appareil, etc.) est une exigence commune. Que ce soit utilisé pour l'analyse statistique, le jugement de compatibilité fonctionnelle ou l'affichage personnalisé, l'identification avec précision de l'environnement client peut considérablement améliorer l'expérience utilisateur.
Le propre $ _Server de PHP ['http_user_agent'] fournit des informations de base du client, mais l'analyse n'est pas facile. Afin de rendre cette tâche plus efficace et plus pratique, nous pouvons encapsuler une classe d'outils Fonction Get_Client_version plus puissante pour identifier automatiquement les navigateurs, les systèmes d'exploitation, les types d'appareils et même les versions d'applications.
Utilisation directement de la chaîne d'agent utilisateur d'origine a les points de douleur suivants:
Le format de chaîne n'est pas unifié, les règles d'analyse sont compliquées
Les versions du navigateur et du système d'exploitation sont mises à jour fréquemment, et la méthode de reconnaissance est souvent invalide
Manque de flexibilité et d'évolutivité, il est difficile de faire face aux besoins d'application multi-terminaux
Pour surmonter ces problèmes, nous avons besoin d'une classe d'outils structurée, modulaire et extensible.
Nous prévoyons de créer une classe ClientSionHelper avec les capacités suivantes:
Identifiez automatiquement les types et versions de navigateur (Chrome, Firefox, Safari, etc.)
Identifiez automatiquement le système d'exploitation et la version (Windows, MacOS, Linux, Android, iOS)
Déterminez s'il s'agit d'un appareil mobile
Prend en charge la reconnaissance de l'en-tête de version de l'application personnalisée (comme le format UA des applications auto-développées)
Fournir un format de retour structuré unifié
Ce qui suit est une implémentation de base, que vous pouvez étendre davantage en fonction des exigences du projet à l'avenir:
<?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);
}
}
Les informations sur la version client structurée sont obtenues avec un simple appel:
$clientHelper = new ClientVersionHelper();
$info = $clientHelper->getClientInfo();
echo '<pre>';
print_r($info);
echo '</pre>';
L'exemple du résultat de retour est le suivant:
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 ...
)
Vous pouvez ajouter les extensions suivantes à la base existante:
Ajoutez une prise en charge des identificateurs UA personnalisés, tels que MyApp / 3.4.5 dans votre propre application UA
Intégrez les bases de données UA (telles que https://gitbox.net/ua-database ) pour prendre en charge plus de reconnaissance de l'appareil
Fournir un mécanisme de mise en cache pour améliorer l'efficacité du traitement
Encapsuler cette classe dans un package compositeur pour une réutilisation et une mise à jour faciles
L'encapsulation d'une classe d'outils Get_Client_version efficace peut non seulement simplifier considérablement la logique de code reconnue par le client, mais également rendre votre application plus maintenable et évolutive. Au lieu d'analyser manuellement l'agent utilisateur à chaque fois, il est préférable de le laisser à une classe d'outils puissante et fiable pour le gérer.
Avec le nombre croissant de types d'appareils et de navigateurs, un bon package gardera votre projet à la pointe de la reconnaissance des utilisateurs.