[PHP] probleme avec preg_replace

Lorient -  
Alain_42 Messages postés 5413 Statut Membre -
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é";
}
?>
Configuration: Windows XP / Firefox 3.5.3

5 réponses

  1. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    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
    1. 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
  2. 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
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    <?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
    1. 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
      1. Flachy Joe Messages postés 2303 Statut Membre 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    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