[PHP] probleme avec preg_replace
Lorient
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
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é";
}
?>
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:
- [PHP] probleme avec preg_replace
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
5 réponses
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 .* ???
}
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 .* ???
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..
<?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é"; } ?>
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 :
Pour le débogage ajoute cette ligne entre preg_replace("/*/", ".*", $ipregex); et if (preg_match(
<? //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 />';
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:
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é"; } ?>
(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 )