Problème d'enregistrement des adresses IP dans fichier txt

Fermé
zarex5 - 22 avril 2013 à 14:33
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016 - 22 avril 2013 à 17:12
Bonjour,

Alors, dans le cadre d'un site de location de serveur mumble, je souhaiterait que les utilisateurs ayant commandé une offre gratuite ne puissent la commander qu'une seule fois par IP, que s'ils re-essayent ils soient redirigés vers une autre page.

Pour cela, j'ai pensé à une blacklist par ip, lors de la finalisation de la commande gratuite, sont ip est enregistrée dans un fichier txt, et un filtre lors de la commande free, si sont ip est dans la blacklist (qu'il a deja commandé) il ne peut plus le faire.

Tout marche parfaitement à une exception près, les ips ayant commandé s'ajoutent a la suite dans le fichier txt sans espace ni retour à la ligne, se qui donne dans le ip.txt : xx.xx.xx.xxxx.xx.xx.xxxx.xx.xx.xx ect.. Donc le filtre ne marche plus.

J'ai cherché sans success.
Y aurait t'il moyen, d'ajouter un espace ou un retour à la ligne lors de l'enregistrement des ips dans le txt ?

Mon Code:
<?php
$Fnm = "ip.txt";
$inF = fopen($Fnm,"a");
$ptr = ftell($inF);
$ptr = fseek($inF,$ptr-10);
$ip = $_SERVER["REMOTE_ADDR"];
fputs($inF,$ip);
fclose($inF);
?>

J'espère avoir une réponse :) J'en ai vraiment besoin :/
Merci d'avance !
A voir également:

2 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 avril 2013 à 14:38
Salut,

comme ça :

$ligne = $ip."\n\r";
fputs($inF, $ligne);
0
Merci pour ta réponse :)
Les IP s'ajoutent parfaitement à la suite avec un retour à la ligne,

Mais, je n'ai aucune idée de pourquoi, depuis la blacklist ne marche plus..
Le code ce la blacklist sur la page de commande:
<?php

$ip_blacklist = file('ip.txt');

$ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';

if ( array_search($ip, $ip_blacklist) !== FALSE )
{
echo '<meta http-equiv="refresh" content="0;URL=offre01.php">';
exit;
}
?>
Aucune idée de pourquoi ? :/
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
22 avril 2013 à 15:50
probablement parce que dans chaque ligne de ton tableau, il y a un retour à la ligne, ce qui rend ta comparaison systématiquement fausse.
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
Modifié par victoires le 22/04/2013 à 14:43
essaye d'ajouter un renvoi à la ligne avant l'écrirture d'ip
$Fnm = "ip.txt";  
$inF = fopen($Fnm,"a");  
$ip = $_SERVER["REMOTE_ADDR"];  
fputs($inF, "\n"); // on va a la ligne  
fputs($inF,$ip);  
fclose($inF); 
-1
Merci de ta réponse également :)
Cela marche parfaitement lorsque j'essaye une premiere fois avec mon ordinateur, le suis bien blacklisté, cependant lorsque je reessaye une seconde fois avec un autre pc sur mon autre box, les deux ips sont bien dans le txt, J'obtient en bien ip.txt:
XX.XX.XX.X1
XX.XX.XX.X2
mais plus aucune d'elle n'est bloquée..


Le script de blacklist par ip:
<?php

$ip_blacklist = file('ip.txt');

// lecture de l'ip en cours
$ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';

// test si l'ip est blacklisté
if ( array_search($ip, $ip_blacklist) !== FALSE )
{
echo '<meta http-equiv="refresh" content="0;URL=offre01.php">';
// stop le script
exit;
}

?>

J'espère que tu aura la solution, je suis perdu ^^
Merci d'avance..
0
Peut être faudrai-t-il faire un espace et non un retour a la ligne pour que le script de blacklist recupere bien les ip dans le txt..
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
22 avril 2013 à 15:17
je ne comprends pas ton array_search ??!!

essaye une chose simple genre :
lis le fichier ligne par ligne et à chaque ligne tu test si les deux valeurs sont égaux tu redirige.

sinon pourquoi tu n'enregistre pâs la liste des ip dans une base de données ?

pour lire le fihcier ligne par ligne
http://dev.petitchevalroux.net/php/lecture-fichier-ligne-par-ligne-php.227.html
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
Modifié par victoires le 22/04/2013 à 15:20
/*Ouverture du fichier en lecture seule*/
$handle = fopen('ip.txt', 'r');
/*Si on a réussi à ouvrir le fichier*/
if ($handle)
{
/*Tant que l'on est pas à la fin du fichier*/
while (!feof($handle))
{
/*On lit la ligne courante*/
$buffer = fgets($handle); // contient la valeur d'ip
// test les deux ip avec un if
if($_SERVER['REMOTE_ADDR'] == $buffer) alors redirection
else ....
}
/*On ferme le fichier*/
fclose($handle);
}
0
Cela me donne donc:
<?php
$handle = fopen('ip.txt', 'r');
if ($handle)
{
while (!feof($handle))
{
$buffer = fgets($handle); // contient la valeur d'ip
if($_SERVER['REMOTE_ADDR'] == $buffer);
else {
echo '<meta http-equiv="refresh" content="0;URL=offre01.php">';
}
}
fclose($handle);
}
?>

Mais quand je teste, je suis toujours redirigé meme si mon ip n'est pas blacklistée..

PS: Je suis novice, et encore quand je dit novice c'est pas mal^^

Merci :)
0