Que pensez vous de mon fichier

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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.

    1
  2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      oui
      0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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.";
    }
    ?>
    0
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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 ...

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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 ?
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      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.
      0
  8. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0
  9. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0