Lors du développement d'applications Web, la compréhension des détails du client peut nous aider à effectuer une adaptation fonctionnelle plus granulaire, une vérification de la sécurité et une analyse du comportement des utilisateurs. PHP est un langage côté serveur flexible qui peut analyser l' agent utilisateur du client via des fonctions, mais nous pouvons également implémenter des fonctions d'extraction d'informations client plus puissantes et extensibles via la fonction Get_Client_version personnalisée.
L'objectif principal de la fonction get_client_version est d'extraire le type du client (tel que le navigateur, le système d'exploitation, le type de périphérique) et les informations de version de l'en-tête de demande. Nous allons l'implémenter en analysant $ _server ['http_user_agent'] et prendre en charge le chargement des règles d'extension personnalisées.
Ce qui suit est la version de base de l'implémentation de la fonction get_client_version et prend en charge le chargement des extensions définies par l'utilisateur:
function get_client_version($user_agent = null, $custom_rules = []) {
if (is_null($user_agent)) {
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
}
$clients = [
'Chrome' => '/Chrome\/([0-9\.]+)/',
'Firefox' => '/Firefox\/([0-9\.]+)/',
'Safari' => '/Version\/([0-9\.]+).*Safari/',
'Edge' => '/Edg\/([0-9\.]+)/',
'Opera' => '/OPR\/([0-9\.]+)/',
'Internet Explorer' => '/MSIE\s([0-9\.]+);/',
'Windows' => '/Windows NT ([0-9\.]+)/',
'macOS' => '/Mac OS X ([0-9_\.]+)/',
'iOS' => '/iPhone OS ([0-9_\.]+)/',
'Android' => '/Android ([0-9\.]+)/',
];
// Fusionner les règles personnalisées
if (!empty($custom_rules) && is_array($custom_rules)) {
$clients = array_merge($clients, $custom_rules);
}
$result = [];
foreach ($clients as $name => $pattern) {
if (preg_match($pattern, $user_agent, $matches)) {
$result[$name] = str_replace('_', '.', $matches[1]);
}
}
return $result;
}
$client_info = get_client_version();
// Informations sur le client de sortie
echo '<pre>';
print_r($client_info);
echo '</pre>';
Vous pouvez détecter les caractéristiques du client exclusives en passant des règles personnalisées, telles que les clients d'application personnalisés au sein de l'entreprise ou certains shells de navigateur spéciaux.
$custom_rules = [
'MyAppClient' => '/MyApp\/([0-9\.]+)/'
];
$client_info = get_client_version(null, $custom_rules);
// Informations sur le client de sortie,Inclure du contenu personnalisé
echo '<pre>';
print_r($client_info);
echo '</pre>';
Analyse des utilisateurs : Statistiques Le navigateur et la distribution de versions utilisés par les utilisateurs.
Traitement de compatibilité fonctionnelle : l'optimisation de la compatibilité est faite pour différents navigateurs ou systèmes.
Politique de sécurité : identifier les clients non pris en charge et interdire l'accès.
Restrictions API : restreignez certains clients à appeler certaines interfaces en fonction des informations du client.
Il est recommandé d'appeler get_client_version à l'entrée publique du projet et de mettre en cache les résultats à $ _Session ou journalisation.
Pour les environnements de concurrence élevés, il est recommandé de combiner redis ou cache de fichier pour éviter l'analyse répétée.
Les informations sur l'agent utilisateur se trouvent dans la documentation de MDN: https://developer.mozilla.org/
Plus d'identifiants de navigateur: https://www.useragentstring.com/