utilisateur fiable de détection du navigateur avec php
Essayer de détecter le navigateur d'un utilisateur avec PHP uniquement, est $_SERVER['HTTP_USER_AGENT'] un moyen fiable? Dois-je plutôt opter pour la get_browser fonction? lequel trouvez-vous apporte des résultats plus précis?
Si cette méthode est pragmatique, il est déconseillé de l'utiliser pour la sortie pertinente des liens de CSS, par exemple:
if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
echo '<link type="text/css" href="mozilla.css" />';
J'ai remarqué cette question, mais je voulais préciser si c'est bon pour les feuilles de style CSS orientés vers la détection.
Mise à JOUR:
quelque chose de vraiment suspect: j'ai essayé echo $_SERVER['HTTP_USER_AGENT'];
sur IE 7 et ce est ce que c'sortie:
Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 6.0; SLCC1; .NET CLR
2.0.50727; PC Media Center 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
Safari a donné quelque chose de bizarre avec "mozilla" dans lui aussi. Ce qui donne?
- Le "Mozilla/4.0" bit est là pour des raisons d'héritage... même dans IE8.
- IE s'identifie calme quelque temps maintenant que Mozilla 4.0. J'ai lu qu'ils l'ont fait pour des raisons de compatibilité, mais ne peut pas trouver la source de la droite maintenant. Si je devais deviner, je dirais que c'est un débris de NetScape/IE temps.
- User-Agent n'est pas fiable. Mais c'est le seul moyen de le deviner.
- webaim.org/blog/user-agent-string-history
- Sympa, merci!
- Fonctionne sans problème sur la version la plus récente de firefox.
- Où sont beaucoup de (bons) navigateur détecteurs de autour de. Essayer de les énumérés ici github.com/ThaDafinser/UserAgentParser
Vous devez vous connecter pour publier un commentaire.
À l'aide d'une méthode existante (c'est à dire
get_browser
) est probablement mieux que d'écrire quelque chose de vous-même, depuis qu'il a (meilleure) et sera mis à jour avec de nouvelles versions. Il peut être également utilisable bibliothèques pour obtenir l'identification navigateur de manière fiable.Décodage de la
$_SERVER['HTTP_USER_AGENT']
est difficile, car beaucoup de navigateurs ont assez de données similaires et ont tendance à (sig)de l'utiliser pour leurs propres avantages. Mais si vous voulez vraiment de les décoder, vous pouvez utiliser les informations sur cette page pour tous à la disposition de l'agent ids.Cette page montre également que votre exemple de sortie, en effet, appartient à IE 7. Plus d'informations sur les champs de l'identifiant de l'agent lui-même peut être trouvé sur cette page, mais comme je l'ai déjà dit, les navigateurs ont tendance à l'utiliser pour leurs propres avantages, et il pourrait être dans un (légèrement) en un autre format.
Vérifier ce code , j'ai trouvé ce qui est utile. Ne cochez pas Mozilla
parce que la plupart des navigateurs d'utiliser cette chaîne de l'agent utilisateur
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== FALSE) echo 'Microsoft Edge';
aprèsif
Ce n'est pas un test utile, presque tous les navigateur s'identifie lui-même comme Mozilla.
Pas.
Pas.
Navigateur-sniffing sur le côté serveur est perdu d'avance. En dehors de toutes les questions de la tentative d'analyser la chaîne de l'agent utilisateur, les navigateurs qui se trouvent, l'obscur navigateurs, et la possibilité de l'en-tête n'est pas là du tout, si vous retournez les différents contenus de la page pour un autre navigateur, vous devez définir la
Vary
en-tête à inclureUser-Agent
, sinon la mise en cache des procurations peuvent revenir à une version incorrecte de la page pour le mauvais navigateur.Mais si vous ajoutez
Vary: User-Agent
IE brisé de la mise en cache de code devient confus et recharge la page à chaque fois. Si vous ne pouvez pas gagner.Si vous devez navigateur-sniff, l'endroit pour le faire est sur le côté client, en JavaScript, et plus précisément dans IE cas, les commentaires conditionnels. C'est une chance que c'est IE qui prend en charge les commentaires conditionnels, puisque c'est le seul navigateur que vous avez souvent besoin de solutions de contournement pour. (Voir scunliffe réponse à la stratégie la plus courante.)
Vieux post vient encore dans Google. get_browser() est la meilleure solution mais la modification de php.ini est peut-être impossible. Selon ce post vous ne pouvez pas ini_set la browscap de la propriété. Reste quoi? phpbrowscap semble faire le travail. Les docs ne sont pas de grands, donc si vous ne voulez pas qu'il auto-mise à jour (la valeur par défaut est activée), vous devez définir
De l'Agent utilisateur peut être truquée et son mieux de ne pas dépendre de la chaîne de l'agent utilisateur plutôt que vous pouvez utiliser CSS3 media queries si vous voulez seulement de détecter l'orientation (vous pouvez explorer le CSS de la célèbre sensible cadre de bootstrap pour vérifier la façon dont vous pouvez gérer l'orientation de la pièce à l'aide des CSS)
Ici peu de CSS :
Lire la suite : À propos de CSS détection de l'orientation
OU Vous pouvez trouver de l'orientation à l'aide de JavaScript :
Lire la suite : À propos de détecter l'orientation à l'aide JS
Enfin si tu veut vraiment aller avec la chaîne de l'agent utilisateur puis ce code va vous aider beaucoup, beau travail presque sur tous les navigateurs :
Le code ci-dessus fonctionne pour moi, presque sur tous les navigateurs et j'espère que ça vous aidera un peu.
Je pense que s'appuyant sur le userAgent est un peu faible car il peut (et est) souvent truquées.
Si vous voulez servir CSS juste pour IE, utilisez un commentaire conditionnel.
ou si vous voulez juste un pour IE6:
Depuis sa un commentaire sa ignorés par les navigateurs... sauf IE qui le charge que si les test-matches du navigateur actuel.
@Ekramul Hoque était sur la bonne voie, mais il y a plusieurs défauts de sa réponse.
Tout d'abord, je voudrais commencer avec Bord en tant que Internet Explorer ne contient pas le terme
Edge
dans l'un de ses Samu.Alors, de continuer à travailler vers l'arrière, selon les versions antérieures d'IE n'ai pas utilisé le
Trident
moteur et, par conséquent, ne contiennent pas dans leur UA.Nous devons cibler les navigateurs iOS prochaine, de sorte que les requêtes ultérieures ne pas interférer avec celui-ci. Tous les iOS utilisé par les navigateurs webkit, à l'exception de l'Opéra Mini, qui ne son rendu à partir d'un serveur distant au lieu de l'appareil. Cela signifie que nous pouvons cibler les OS de l'UA avec
iOS
et de les exclure de la Samu qui contiennentOpera
.Ensuite, passer à Firefox navigateurs. Lors de l'utilisation de Firefox pour le terme de recherche de travail, il sera seulement d'identifier Firefox navigateurs, pas Firefox navigateurs. Firefox contient
Gecko
dans ses UA comme Gecko est le moteur qu'il utilise, et on peut donc cible. En utilisantGecko
, nous pouvons identifier tous les navigateurs qui s'exécutent sur le moteur Gecko (c'est à dire SeaMonkey). Cependant, de nombreux navigateurs utilisent le termelike Gecko
pour des raisons de compatibilité, il nous faut donc être sûr deGecko
et paslike Gecko
.De passer, nous allons identifier Opera navigateurs. Opéra utilisé le
Presto
moteur à la fin de v12. En commençant par v15, ils ont commencé à utiliser le Clin moteur comme google Chrome. v12 et antérieures contenues deux mots uniques dans l'UA qui v15+ ne pas avoir--Opera
etPresto
. Vous pouvez cibler comme ils l'ont toujours été présents ensemble. Pour v15, l'Opéra a commencé à utiliserOPR
dans l'UC.Jusqu'à la prochaine est Safari. Safari utilise AppleWebKit que son moteur de rendu, mais nous ne pouvons pas viser uniquement que parce que google Chrome inclut également la
AppleWebKit
etSafari
dans ses UA pour des raisons de compatibilité. Par conséquent, nous avons besoin de la recherche pourAppleWebKit
et pasChrome
.Enfin, nous arrivons à google Chrome. Chrome utilisé AppleWebKit jusqu'à v27. Avec la v28 libération, ils ont changé pour le Clin d'oeil du moteur. Nous pourrions cibler à la fois les moteurs mais il faudrait beaucoup de code. Être que Chrome est presque à v70 maintenant, nous allons juste la recherche pour
Chrome
comme il est très peu probable que quelqu'un est toujours une version de webkit de Chrome.Et le dernier mais non le moindre, votre secours/d'autre.
Maintenant, j'ai utilisé les fichiers css se référant au vendeur préfixe pour cible ici. Hésitez pas à ajuster selon les besoins de l'avoir faire ce que vous avez besoin de faire. J'espère que cela a aidé.