[PHP] probleme avec preg_replace

Fermé
Lorient - 16 mars 2010 à 17:46
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 17 mars 2010 à 08:53
Bonjour,
J'ai trouvé une fonction qui laisse l'accés seulement à des IPs / des plages precises, mais je sais pas pourquoi ça pas marché pour moi, je reçois toujours "l'accés ouvert" même si l'IP n'est pas listé dans le script.. et toujours je vois ce petit message d'erreur :
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in C:\AppServ\www\text.php on line 13
Bienvenue


Voila la fonction en question :
<?
//allowable IP addresses for admin login.
$ip = array();
$ip[] = '10.10.3.*';
$ip[] = '211.109.238.74';
$ip[] = '254.254.254.2';

function testIP($ip){
//testing that correct IP address used in order
//to access admin area...
for($i=0, $cnt=count($ip); $i<$cnt; $i++) {
$ipregex = preg_replace("/./", "\.", $ip[$i]);
$ipregex = preg_replace("/*/", ".*", $ipregex);

if(preg_match('/'.$ipregex.'/', $_SERVER[REMOTE_ADDR]))
return true;
}
return false;
}
if (testIP($ip)){
echo "Bienvenue";
}
else {
echo "Accés refusé";
}
?>
A voir également:

5 réponses

Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 450
16 mars 2010 à 17:59
return true;
}
return false;
}

il manque pas un else et deux{ ?

{return true;
} else {
return false;
}


Après tes deux return cités , vu que tu fais un return les lignes
if (testIP($ip)){
echo "Bienvenue";
}
else {
echo "Accés refusé";
}

ne sont jamais executées. Qui plus est, ni a-t-il pas une erreur dans ton regex sur le .* ???
0
J'ai pas compris pourquoi mes returns ne seront pas executé.. alors comment faire pour utiliser la fonction dans ce cas..

(et aprés l'ajout de else avant le return false; je reçois cet erreur : Parse error: syntax error, unexpected $end in C:\AppServ\www\text.php on line 28 )
0
En faite j'ai besoin de laisser l'accès à quelques chose dans mon site seulement à des IPs et des plages précis, s'il vous plait n'hésitez pas de me sauver ! si vous avez de solution, c'est très urgent..
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 mars 2010 à 19:25
<?php
//allowable IP addresses for admin login.
$ip = array();
$ip[] = '10.10.3.*';
$ip[] = '211.109.238.74';
$ip[] = '254.254.254.2';

function testIP($ip){
	//testing that correct IP address used in order
	//to access admin area...
	for($i=0, $i<$sizeof($ip); $i++) {
		$ipregex = preg_replace("/./", "\.", $ip[$i]);
		$ipregex = preg_replace("/*/", ".*", $ipregex);

		if(preg_match('/'.$ipregex.'/', $_SERVER[REMOTE_ADDR])){
			return true;
		}else{
			return false;
		}	
	}
}
	
if (testIP($ip)){
	echo "Bienvenue";
}else {
	echo "Accés refusé";
}
?>
0
Merci mais toujours le même problème :
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in C:\AppServ\www\text.php on line 14
Bienvenue
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260 > Lorient
16 mars 2010 à 20:36
D'une part, la fonction d'origine devrait fonctionner, le else n'est pas nécessaire, il corrompt même le fonctionnement, voila l'indentation correcte du script :
<?
//allowable IP addresses for admin login.
$ip = array();
$ip[] = '10.10.3.*';
$ip[] = '211.109.238.74';
$ip[] = '254.254.254.2';

function testIP($ip){
    //testing that correct IP address used in order
    //to access admin area...
    for($i=0, $cnt=count($ip); $i<$cnt; $i++) {
        $ipregex = preg_replace("/./", "\.", $ip[$i]);
        $ipregex = preg_replace("/*/", ".*", $ipregex);

        if (preg_match('/'.$ipregex.'/', $_SERVER[REMOTE_ADDR])
          return true;
    }
    return false;
}

if (testIP($ip))
    echo "Bienvenue";
else 
    echo "Accès refusé";
?>

Pour le débogage ajoute cette ligne entre preg_replace("/*/", ".*", $ipregex); et if (preg_match(
echo 'Test de correspondance de '.$ipregex.' avec '.$_SERVER[REMOTE_ADDR].' <br />';
0
Merci, mais toujours le même erreur
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in C:\AppServ\www\text.php on line 13
Test de correspondance de avec 127.0.0.1
Bienvenue
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 mars 2010 à 08:53
je ne vois pas a quoi sert ton preg_replace

tu modifies les valeurs de ton array $ip ?

hors il suffirait que dans cet array tu saisisses les valeurs ad ok



$ipregex = preg_replace("/./", "\.", $ip[$i]); // tu remplaces . par \.

$ipregex = preg_replace("/*/", ".*", $ipregex); // tu remplaces * par .*



essayes en supprimant les preg_replace:

<?php
//allowable IP addresses for admin login.
$ip = array();
$ip[] = '10.10.3.*';
$ip[] = '211.109.238.74';
$ip[] = '254.254.254.2';

function testIP($ip){
	//testing that correct IP address used in order
	//to access admin area...
	for($i=0, $i<$sizeof($ip); $i++) {
		$ipregex = $ip[$i]);		

		if(preg_match('/'.$ipregex.'/', $_SERVER[REMOTE_ADDR])){
			return true;
		}else{
			return false;
		}	
	}
}
	
if (testIP($ip)){
	echo "Bienvenue";
}else {
	echo "Accés refusé";
}
?>


0