[PHP] probleme avec preg_replace

Lorient -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
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 1572 Date d'inscription   Statut Membre Dernière intervention   452
 
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
Lorient
 
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
Lorient
 
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   Statut Membre Dernière intervention   894
 
<?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
Lorient
 
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 2102 Date d'inscription   Statut Membre Dernière intervention   261 > Lorient
 
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
Lorient
 
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   Statut Membre Dernière intervention   894
 
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