Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/03/2006, 20h44   #1
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
Par défaut Détection de l'OS (systeme d'exp) et du browser (navigateur)

Salut,
j'ai un site heberger chez free et en voulant utiliser la fonction get_browser(), mais elle est indisponible.
Si quelqu'un avait un equivalent qui integre la detection des bot et tout et tout ca serai cool.
Les script sur la page de doc php ne detecte que les navigateur les plus communs...
merci d'avance
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 20h48   #2
Nouveau Membre du Club
 
Étudiant
Inscription : juin 2004
Messages : 78
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2004
Messages : 78
Points : 34
Points : 34
Salut, je peux te proposer $_SERVER[], pour récupérer diverses informations.

http://perso.univ-rennes1.fr/pascal.aubry/doc/php_variables/_server.php

pour un petit récapitulatif

Je ne sais pas si cela répond exactement a ton besoin (bot..) mais c'est une piste
Bonne soirée, DD.
ddelec24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 20h52   #3
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
Pour fonctionner cette fonction a besoin d'être pontée avec un fichier browscap.ini.

Le chemin de ce fichier doit impérativement être spécifié dans le php.ini de ton serveur. Vois si tu peux modifier temporairement cette directive avec ini_set() ?
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 20h55   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Salut,

Dans la doc de la fonction get_browser(), on voit qu'il font référence à _SERVER["HTTP_USER_AGENT"] qui contient les infos dont tu as besoin.

Ensuite pour rafiner tu peux très bien te refaire une petite fonction reexploitant un fichier browscap.ini de ton cru et ceci sans intervention de free ( très très simple via parse_ini_file() )

Mais c'est vraiment si tu veux un truc complet car sinon un petit parse du user agent peut être suffisant

Cordialement
Pierre
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 21h26   #5
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
je comprend pas trop comment utiliser la variable $_SERVER["HTTP_USER_AGENT"]; avec la fonction parse_ini_file
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 21h30   #6
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Je pense que je n'ai pas assez explicité mon raisonement.

Tu commences par récuperer un fichier browscap.ini à jour à cette adresse : http://www.garykeith.com/browsers/downloads.asp

Ensuite, tu mets ce fichier sur ton serveur et tu le parse avec parse_ini_file.
Cela va te donner un tableau avec tous les user agents et tu n'as plus qu'à faire une recherche dan sle tableau avec ce que tu as dans $_SERVER['USER_AGENT']

J'espère avoir été assez clair

En gros on reproduit le fonctionement de get_browser

Pierre
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 21h55   #7
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
Code :
$_SERVER["HTTP_USER_AGENT"] retourne ca, normal :
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060124 Firefox/1.5.0.1

Code :
parse_ini_file("php_browscap.ini")
ca :
Array
(
[browser] => Default Browser
[version] => 7.0
[frames] =>
[iframes] =>
[tables] => 1
[cookies] =>
[backgroundsounds] =>
[vbscript] =>
[javascript] =>
[javaapplets] =>
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] =>
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
[parent] => IE 7.0
[css] => 0
[majorver] => 7
[minorver] => 0
[platform] => WinXP
[javaappletsframes] => 1
[AK] =>
[SK] =>
[Win16] =>
)

mon code php est le suivant:
Code :
1
2
3
4
5
6
7
function browser_info() {
echo $_SERVER["HTTP_USER_AGENT"];
$parse = parse_ini_file("php_browscap.ini");
echo "<br /><pre>";
print_r($parse);
echo "</pre>";
}
en fit je comprend la le retour de parse_ini_file, on dirai qu'il melange plusieur entrer, default browser c'est:
[*]
browser="Default Browser"
css = 0
frames = False
iframes = False
tables = True
cookies = False
backgroundsounds = False
vbscript = False
javascript = False
javaapplets = False
activexcontrols = False
cdf = False
aol = False
beta = False
Win16 = False
crawler = False
stripper = False
wap = False
netclr = False
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 23h05   #8
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
il ne faut pas oublier de rajouter le deuxième paramètre de parse_ini_file à TRUE pour garder les sections comme explicité dans la doc
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 23h33   #9
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
comment je fais pour passer de:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060124 Firefox/1.5.0.1
a la section du fichier .ini correspondate.
J'ai jamais utiliser de fichier ini avant, je capte pas comment faire la correspondance.
merci de m'aider
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 12h47   #10
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
Re-bonjour,
si quelqu'un pouvait expliciter comment utiliser conjointement parse_file_ini et $_SERVER["HTTP_USER_AGENT"].
Je n'ai jamais utiliser de fichier ini, je ne comprend pas les expliquer précédente (je ne vois pas du tout l'algo a mettre en place)
merci
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 13h11   #11
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Avec un truc comme ca cela doit marcher mais je viens de voir qu'il peut y avoir des caractères spéciaux dans les clés des sections du fichier ini ( j'aurais du y penser car sinon cela ferait de possibilités.)

Pour un début de code, on peut avoir un truc comme ca.

Code :
1
2
3
4
5
6
 
$user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060124 Firefox/1.5.0.1';
 
$tabBrowser = parse_ini_file('php_browscap.ini',TRUE);
 
$data = $tabBrowser[$user_agent]; //Ne fonctionne pas car la chaine n'est pas présente tel quel dans le fichier ini
Ensuite il faut adapter le user_agent pour éliminer certaines parties non significatives. Clairement cela ne marche pas car le user agent contient par exemple la révision du noyau, etc...

Il faut étudier un peu le fichier ini, et les différents user agent pour déterminer un genre de masque à appliquer.

mais là, on en revient à refaire completement la fonction get_browser ce qui est dommage car ce sera beaucoup moins performant

pierre
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 14h43   #12
Invité de passage
 
Inscription : janvier 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 17
Points : 3
Points : 3
Envoyer un message via MSN à lyhana8
ok, merci pour la syntae. Pour l'histoire du masque, c'est bien ce qu'il me sembler, je penser qui yavait une methode moins bourrine que le masque.
Par masque tu entends bien utiliser des regexp ?
je fais comme suis pour recuperer le browser et l'os:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function browser_info() {
$c_user = strtolower($_SERVER['HTTP_USER_AGENT']);
 
$os = array ( "mac" => "MacOS",  "linux" => "Linux",  "win" => "Windows",  "bsd" => "BSD",  "qnx" => "QNX",  "sun" => "SunOS",  "solaris" => "Solaris",  "irix" => "IRIX",  "aix" => "AIX",  "unix" => "Unix",  "amiga" => "Amiga",  "os/2" => "OS/2",  "beos" => "BeOS");
$browser = array("opera" => "Opera",  "msie" => "Internet Explorer", 
"voyager" => "Voyager", "lynx" => "Lynx", "safari" => "Safari", "camino" => "Camino", "firefox" => "Firefox", "netscape" => "Netscape"); // mozilla
 
// identify OS
$user_os = "Exotical OS";
foreach ($os as $k_is => $v_is)
	if (substr_count($c_user, $k_is))
		$user_os = $v_is;
// identify browser : special test for Gecko Engine
$user_bro = "Exotical Browser";
foreach($browser as $kb_is => $vb_is)
	if (stristr($c_user, $kb_is))
		$user_bro = $vb_is;
 
return array ("platform" => $user_os, "browser" => $user_bro); // add_visit()
}
Le probleme c'est que je ne reconnais que les os ou browser present dans ma table... Or j'aurai bien voulu reconnaitre les bot et autres machin bizarre.
lyhana8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h06.


 
 
 
 
Partenaires

Hébergement Web