Que pensez vous de mon fichier

Signaler
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
-
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
-
bonjour a tous
je viens de réaliser un fichier afin de pouvoir retrouver
l ip /le navigateur/le système d exploitation /l heure /pays /ville ect...
lorsque le visiteur visite ma page sur mon site
j aurais souhaiter savoir si j aurais pu l améliorer , le rendre plus efficace
merci de l aide
<?php
//debut de recherche pour la localisation de la personne tout ne sera pas utilise
  $ip = $_SERVER["REMOTE_ADDR"];
      // Use JSON encoded string and converts 
    // it into a PHP variable 
    $ipdat = @json_decode(file_get_contents( 
        "http://www.geoplugin.net/json.gp?ip=" . $ip)); 
    $country = $ipdat->geoplugin_countryName; 
    $city = $ipdat->geoplugin_city; 
    $continent_name = $ipdat->geoplugin_continentName; 
    $latitude = $ipdat->geoplugin_latitude; 
    $longitude = $ipdat->geoplugin_longitude; 
    $currency_symbol = $ipdat->geoplugin_currencySymbol; 
    $currency_code = $ipdat->geoplugin_currencyCode; 
    $timezone = $ipdat->geoplugin_timezone; ;
	//fin de recherche pour la localisation de la personne
	//debut de recherche du navigateur de la personne
	$browser = $_SERVER['HTTP_USER_AGENT'];
//fin de recherche du navigateur de la personne
//debut de recherche du systeme d exploitation de la personne
$user_agent = getenv("HTTP_USER_AGENT");

if (strpos($user_agent, "Win") !== FALSE)
    $os = "Windows";
elseif ((strpos($user_agent, "Mac") !== FALSE) || (strpos($user_agent, "PPC") !== FALSE))
    $os = "Mac";
elseif (strpos($user_agent, "Linux") !== FALSE)
    $os = "Linux";
elseif (strpos($user_agent, "FreeBSD") !== FALSE)
    $os = "FreeBSD";
elseif (strpos($user_agent, "SunOS") !== FALSE)
    $os = "SunOS";
elseif (strpos($user_agent, "IRIX") !== FALSE)
    $os = "IRIX";
elseif (strpos($user_agent, "BeOS") !== FALSE)
    $os = "BeOS";
elseif (strpos($user_agent, "OS/2") !== FALSE)
    $os = "OS/2";
elseif (strpos($user_agent, "AIX") !== FALSE)
    $os = "AIX";
else
    $os = "Autre";
//fin de recherche du systeme d exploitation de la personne

//debut recherche ip de la personne
$filename = 'test.txt';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$somecontent=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$somecontent=$_SERVER['REMOTE_ADDR'];
//fin recherche ip de la personne
//debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
//debut recherche heure de la personne
$date=$_SERVER['REQUEST_TIME'];
setlocale(LC_TIME, "fr_FR");
$date1 = date('Y-m-d H:i:s', $date +7200); // Date du jour
//fin recherche heure de la personne
// Assurons nous que le fichier est accessible en écriture
if (is_writable($filename)) {
// Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
// Le pointeur de fichier est placé à la fin du fichier
// c'est là que $somecontent sera placé
if (!$handle = fopen($filename, 'a')) {
echo "Impossible d'ouvrir le fichier ($filename)";
exit;
}
// Ecrivons quelque chose dans notre fichier.
echo $date2;
if (fwrite($handle,strftime("%A %d %B %G %H:%M:%S", strtotime($date1))."\t $os.\t $browser.\t $country.\t  $city\t $somecontent.\t $link.\r\n") === FALSE) {
echo "Impossible d'écrire dans le fichier ($filename)";
exit;
}
echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";
fclose($handle);
} else {
echo "Le fichier $filename n'est pas accessible en écriture.";
}
?>

8 réponses

Messages postés
32276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 mai 2021
3 448
Bonjour,

Comprends tu à quoi servent les lignes 47 à 50 ?

Si oui... tu peux donc revoir le début de ton code
Si non... regarde la doc.


Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
bonjour Jordane
oui je recherche l ip réelle de la personne...

pour le début du code je me sers de l ip de la personne pour rechercher sa localisation

cela aurait peut être été mieux que je cherche sa localisation avec la variable $somecontent
Messages postés
32276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 mai 2021
3 448
oui
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
merci de l aide
donc le code serait le suivant
<?php
//debut recherche ip de la personne
$filename = 'test.txt';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$somecontent=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$somecontent=$_SERVER['REMOTE_ADDR'];
//fin recherche ip de la personne
//debut de recherche pour la localisation de la personne
  $ip = $somecontent;
      // Use JSON encoded string and converts 
    // it into a PHP variable 
    $ipdat = @json_decode(file_get_contents( 
        "http://www.geoplugin.net/json.gp?ip=" . $ip)); 
    $country = $ipdat->geoplugin_countryName; 
    $city = $ipdat->geoplugin_city; 
    $continent_name = $ipdat->geoplugin_continentName; 
    $latitude = $ipdat->geoplugin_latitude; 
    $longitude = $ipdat->geoplugin_longitude; 
    $currency_symbol = $ipdat->geoplugin_currencySymbol; 
    $currency_code = $ipdat->geoplugin_currencyCode; 
    $timezone = $ipdat->geoplugin_timezone; ;
	//fin de recherche pour la localisation de la personne
	//debut de recherche du navigateur de la personne
	$browser = $_SERVER['HTTP_USER_AGENT'];
//fin de recherche du navigateur de la personne
//debut de recherche du systeme d exploitation de la personne
$user_agent = getenv("HTTP_USER_AGENT");

if (strpos($user_agent, "Win") !== FALSE)
    $os = "Windows";
elseif ((strpos($user_agent, "Mac") !== FALSE) || (strpos($user_agent, "PPC") !== FALSE))
    $os = "Mac";
elseif (strpos($user_agent, "Linux") !== FALSE)
    $os = "Linux";
elseif (strpos($user_agent, "FreeBSD") !== FALSE)
    $os = "FreeBSD";
elseif (strpos($user_agent, "SunOS") !== FALSE)
    $os = "SunOS";
elseif (strpos($user_agent, "IRIX") !== FALSE)
    $os = "IRIX";
elseif (strpos($user_agent, "BeOS") !== FALSE)
    $os = "BeOS";
elseif (strpos($user_agent, "OS/2") !== FALSE)
    $os = "OS/2";
elseif (strpos($user_agent, "AIX") !== FALSE)
    $os = "AIX";
else
    $os = "Autre";
//fin de recherche du systeme d exploitation de la personne


//debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
//debut recherche heure de la personne
$date=$_SERVER['REQUEST_TIME'];
setlocale(LC_TIME, "fr_FR");
$date1 = date('Y-m-d H:i:s', $date +7200); // Date du jour
//fin recherche heure de la personne
// Assurons nous que le fichier est accessible en écriture
if (is_writable($filename)) {
// Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
// Le pointeur de fichier est placé à la fin du fichier
// c'est là que $somecontent sera placé
if (!$handle = fopen($filename, 'a')) {
echo "Impossible d'ouvrir le fichier ($filename)";
exit;
}
// Ecrivons quelque chose dans notre fichier.
echo $date2;
if (fwrite($handle,strftime("%A %d %B %G %H:%M:%S", strtotime($date1))."\t $os.\t $browser.\t $country.\t  $city\t $somecontent.\t $link.\r\n") === FALSE) {
echo "Impossible d'écrire dans le fichier ($filename)";
exit;
}
echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";
fclose($handle);
} else {
echo "Le fichier $filename n'est pas accessible en écriture.";
}
?>
Messages postés
32276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 mai 2021
3 448
Un découpage du code en FONCTIONS le rendra plus lisible et plus facilement maintenable.


Par exemple :

Pour récupérer l'adresse IP de l'utilisateur
function getUserIP(){
  if (!empty($_SERVER["HTTP_CLIENT_IP"]){
   //check for ip from share internet
   $ip = $_SERVER["HTTP_CLIENT_IP"];
  }elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
   // Check for the Proxy User
   $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  }else{
   $ip = $_SERVER["REMOTE_ADDR"];
  }
  return $ip;
}




Pour connaitre le navigateur de l'utilisateur :
https://www.php.net/manual/en/function.get-browser.php#101125
function getBrowser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $bname = 'Unknown';
    $platform = 'Unknown';
    $version= "";

    //First get the platform?
    if (preg_match('/linux/i', $u_agent)) {
        $platform = 'linux';
    }
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
        $platform = 'mac';
    }
    elseif (preg_match('/windows|win32/i', $u_agent)) {
        $platform = 'windows';
    }
   
    // Next get the name of the useragent yes seperately and for good reason
    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
    {
        $bname = 'Internet Explorer';
        $ub = "MSIE";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $bname = 'Mozilla Firefox';
        $ub = "Firefox";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $bname = 'Google Chrome';
        $ub = "Chrome";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $bname = 'Apple Safari';
        $ub = "Safari";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $bname = 'Opera';
        $ub = "Opera";
    }
    elseif(preg_match('/Netscape/i',$u_agent))
    {
        $bname = 'Netscape';
        $ub = "Netscape";
    }
   
    // finally get the correct version number
    $known = array('Version', $ub, 'other');
    $pattern = '#(?<browser>' . join('|', $known) .
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($pattern, $u_agent, $matches)) {
        // we have no matching number just continue
    }
   
    // see how many we have
    $i = count($matches['browser']);
    if ($i != 1) {
        //we will have two since we are not using 'other' argument yet
        //see if version is before or after the name
        if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
        }
        else {
            $version= $matches['version'][1];
        }
    }
    else {
        $version= $matches['version'][0];
    }
   
    // check if we have a number
    if ($version==null || $version=="") {$version="?";}
   
    return array(
        'userAgent' => $u_agent,
        'name'      => $bname,
        'version'   => $version,
        'platform'  => $platform,
        'pattern'    => $pattern
    );
}



Et pour info
getenv("HTTP_USER_AGENT")

ou
 $_SERVER["HTTP_USER_AGENT"]

retournent la même chose ...

Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
un immense merci jordane pour ce morceau de code
mais j essaye de récupérer en écriture les variables afin de les écrire dans le fichier texte
$u_agent,
$bname,
$version,
$platform,
$pattern

mais sans succès l emplacement ou elles devraient s écrire restent vide
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
je comprendre
je devais ajouter ceci
// now try it
$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
print_r($yourbrowser);


avec chrome cela fonctionne par contre avec internet explorer j ai ceci

Your browser: Unknown ?
Messages postés
32276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 mai 2021
3 448
Tu utilises Internet explorer où edge ?
Il se peut qu'il faille rajouter un peu de code dans la fonction pour prendre en compte ce dernier.
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
merci pour la reponse
en fait je compte mettre ce morceau de code sur chacune de mes pages importante et dont je veux voir qui vient les voirs

donc je désire que tout les navigateurs ou du moins les plus importants puissent me retourner quelque chose
idem pour le système d exploitation
Messages postés
2510
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
3 mai 2021
134
apparemment il faudrait ajouter Trident dans les conditions
et donc ajouter ceci

 elseif(preg_match('/Trident/i',$u_agent))
    {
        $bname = 'Internet explorer';
        $ub = "Trident";
    }


juste que la reponse est ceci avec le 7.0 alors que je suis en version 11

Your browser: Internet explorer 7.0