Afficher le contenu selon ip du pays

Fermé
Marc - 9 févr. 2010 à 12:44
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 - 12 févr. 2010 à 20:57
Bonjour,
Je cherche a mettre en place un système grâce a laquelle un contenu spécifique s'affiche en fonction du pays du visiteur. j'ai cherché et j'ai trouvé ça:

$ip_autorisee = 1.2.3.4;
if($_SERVER['REMOTE_ADDR'] == $ip_autorisee){

Affichage 111

}
else {
//Message d'erreur ex :
echo "Affichage 222";
}

Mais quoi mettre ici: $ip_autorisee = 1.2.3.4; ? Comment savoir si l'adresse ip est d'origine francaise?

Si vous avez une autre méthode s'il vous plait dites le moi.

Merci d'avance

ps: si je ne suis pas asses clair dites le moi :)

12 réponses

gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
10 févr. 2010 à 09:36
Re,

essaye de remplacer ça:

$fp = fsockopen ("www.ip-to-country.com", 80, &$errno, &$errstr, 30);

par ça

$fp = fsockopen ("www.ip-to-country.com", 80, $errno, $errstr, 30);

Ici, l'erreur se fait au niveau des variable par référence, en les mettant par valeur, peut-être que ça marchera u_u' lol

A+

Gaerebut
1
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
11 févr. 2010 à 13:11
Alors effectivement il n'y a plus d'erreur, mais maintenant plus rien s'affiche (page blanche). voici tout le code de ma page:

<?php
/* extraction adresse IP du visiteur */
$ip = $_SERVER['REMOTE_ADDR'];
/* transformation IP */
$dotted = preg_split( "/[.]+/", $ip);
$ip2 = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
/* URL du serveur et paramètres à lui passer */
$url = "/get-country/?ip=".$ip2."&user=guest&pass=guest";
/* ouverture de la socket */
$fp = fsockopen ("www.ip-to-country.com", 80, $errno, $errstr, 30);
/* test si erreur à l'ouverture */
if (!$fp) {
/* affichage de l'erreur */
echo "$errstr ($errno)<br>\n";
} else {
/* envoi de la requête HTTP */
fputs ($fp, "GET $url HTTP/1.0\r\nHost: ip-to-country.com\r\n\r\n");
/* réception des données en retour */
while (!feof($fp)) {
/* extraction réponse */
$response .= fgets ($fp,128);
}
/* fermeture socket */
fclose ($fp);
}



function IPAddress2IPNumber($dotted) {
$dotted = preg_split( "/[.]+/", $dotted);
$ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
return $ip;
}


function IPNumber2IPAddress($number) {
$a = ($number/16777216)%256;
$b = ($number/65536)%256;
$c = ($number/256)%256;
$d = ($number)%256;
$dotted = $a.".".$b.".".$c.".".$d;
return $dotted;
}

$lignes = explode("\n",$response);
$pays = $lignes[sizeof($lignes)-1];
?>

S'il vous plait aidez moi c'est vraiment très important. Merci gaerebut pour ton soutien.
1
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
9 févr. 2010 à 16:07
Salut,

pourquoi ne pas directement afficher la langue du visiteur ?!
Pour ça c'est facile, on utilise un petit script PHP qui détecte la langue par défaut du navigateur client:

<?php
$lang= explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang= strtolower(substr(chop($lang[0]),0,2));

echo $lang;
?>

Après, tu peux utiliser un tableau PHP contenant uniquement les pays autorisé (ou uniquement les pays interdit).
Puis, via la fonction in_array(); on detecte si la langue appartient au tableau:

Exemple:
<?php
     $lang= strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2));

     $arrAcceptLanguage = array('fr', 'en', 'de', 'it') //Langue AUTORISEES

     if(in_array($lang, $arrAcceptLanguage))
          echo 'Bienvenu !'; // Autorisé
     else
          header('location: error.php') // Non autorisé => Redirigé sur la page error.php
?>


A+

Gaerebut
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
9 févr. 2010 à 17:03
Bonjour gaerebut,

dans ta technique est ce que c'est possible qu'un américain avec un son navigateur français voit le contenu?

Pour ma part c'est de la publicité que je vais afficher, ma régie publicitaire est française et me demande que ce soit que des visiteurs français cliquent sur les pub.

J'attends ta réponse, et merci encore.
0

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

Posez votre question
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
9 févr. 2010 à 17:14
Je viens de vérifier et c'est effectivement ce que je pensai. Je cherche plus un système qui affiche seulement quand c'est du territoire français qu'on accède.

Si vous avez des idées?

Merci :)
0
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
9 févr. 2010 à 17:18
RE,

oui dans le cas ou ton américain configuré en Francais, il pourra y accéder ...
Faut alors détecter le pays en fonction de l'ip

Va faire un tour ici : https://cyberzoide.developpez.com/php4/ip-to-country/

A+

Gaerebut
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
9 févr. 2010 à 22:21
gaerebut merci encore une fois, mais j'ai pas trop compris comment cela fonctionne vraiment. J'ai essayer de differentes facons. je fait copier coller l'exemple puis j'exécute mais une erreur s'affiche.

<?php
/* extraction adresse IP du visiteur */
$ip = $_SERVER['REMOTE_ADDR'];
/* transformation IP */
$dotted = preg_split( "/[.]+/", $ip);
$ip2 = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
/* URL du serveur et paramètres à lui passer */
$url = "/get-country/?ip=".$ip2."&user=guest&pass=guest";
/* ouverture de la socket */
$fp = fsockopen ("www.ip-to-country.com", 80, &$errno, &$errstr, 30);
/* test si erreur à l'ouverture */
if (!$fp) {
/* affichage de l'erreur */
echo "$errstr ($errno)<br>\n";
} else {
/* envoi de la requête HTTP */
fputs ($fp, "GET $url HTTP/1.0\r\nHost: ip-to-country.com\r\n\r\n");
/* réception des données en retour */
while (!feof($fp)) {
/* extraction réponse */
$response .= fgets ($fp,128);
}
/* fermeture socket */
fclose ($fp);
}
?>

Voici l'erreur:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /home/www/e61a8680e8b575431a3048f0c67a7f81/web/pub.php on line 10

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /home/www/e61a8680e8b575431a3048f0c67a7f81/web/pub.php on line 10

que faire s'il vous plait.
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
12 févr. 2010 à 12:58
personne ne peut m'aider?
0
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
12 févr. 2010 à 15:06
Rien ne s'affiche car tu n'a peut-être pas appelé les fonctions ?! lol

On sait jamais :p

A+
Gaerebut
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
12 févr. 2010 à 18:20
Gaerebut merci et merci :))
le seul petit (et grand) soucis c'est que je suis très mauvais en php, tu l'a remarqué. Comment dois-je faire pour l'appeler?
Je doit faire echo $variable;
mais quelle variable? S'il te plait.
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
12 févr. 2010 à 18:29
d'après une logique j'ai essayé
echo $pays;
mais ça na marche pas...
0
Snoopip Messages postés 235 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 mai 2014 7
12 févr. 2010 à 20:57
s'il vous plait...
0