Que pensez vous de mon fichier

Résolu/Fermé
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 - 1 mai 2021 à 11:31
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 - 1 mai 2021 à 17:18
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.";
}
?>
A voir également:

8 réponses

jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 mai 2021 à 11:53
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
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
1 mai 2021 à 12:08
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
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 mai 2021 à 12:20
oui
0
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
1 mai 2021 à 12:31
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
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 mai 2021 à 12:43
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

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

Posez votre question
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
1 mai 2021 à 13:10
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
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
Modifié le 1 mai 2021 à 13:25
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
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 mai 2021 à 14:03
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
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
1 mai 2021 à 15:24
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
flexi2202 Messages postés 3790 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 20 avril 2024 179
Modifié le 1 mai 2021 à 17:18
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