وعليكم السلام ورحمة الله وبركاته
لفتت نظرى الفكرة واعتقدت اننى ساحتاج اليها قريبا إن شاء الله , لذا قمت بعمل هذه الدالة
كود PHP:
<?php
function ipInRange($userIp , $ipRange){
$braces = array('[',']');
$userIpToks = explode('.' , $userIp);
if( !(strpos($ipRange , ']')) && strpos($ipRange,'*') === false){
if($ipRange == $userIp) return true;
}
$ipRangeToks = explode('.' , $ipRange);
$matches = 0;
for($i=0 ; $i<=4 ; $i++){
if(strpos($ipRangeToks[$i],']')){
$ipRangeToks[$i] = str_replace($braces , '' , $ipRangeToks[$i]);
list($min,$max) = explode('-',$ipRangeToks[$i]);
if(($userIpToks[$i] >= $min && $userIpToks[$i] <= $max)){
$matches++;
}
else{
break;
}
}
elseif(strpos($ipRangeToks[$i],'*')!== false){
$matches++;
}
else{
if($ipRangeToks[$i] == $userIpToks[$i]){
$matches++;
}
else{
break;
}
}
if($matches == 4) return true;
}
return false;
}
?>
الدالة لها معاملين الاول هو الابى المراد التحقق منه (اى بى الزائر) والثانى هو المدى المراد التحقق خلاله.
المدى له ثلاث عناصر:
- ارقام 127 او 200 او 255 الى اخره
- فترات [100-200] هذا يعنى اى رقم من 100 الى 200
- علامة ( * ) وهى تعنى اى رقم
ياتى المدى ليجمع بين هذه العناصر لتكوين الشرط المطلوب, فمثلا كل هذه الامثلة تحقق الاى بى 127.0.0.1
كود PHP:
127.0.0.1
[100-200].0.0.1
127.*.*.*
127.[0-5].[0-5].[0-5]
*.*.*.*
امثلة على استخدام الدالة
كود PHP:
<?php
$userIp = '127.0.0.1'; // اى بى الزائر
if(ipInRange($userIp , '127.*.*.[0-5]') ){ // هذا الشرط صحيح
echo "$range : نعم <br>";
}
else{
echo "$range : لا <br>";
}
/////
if(ipInRange($userIp , '[100-120].*.*.[0-5]') ){ // هذا الشرط غير صحيح لان 127 اكبر من 120
echo "$range : نعم <br>";
}
else{
echo "$range : لا <br>";
}
?>
والان بالطبع يمكنك استخدام الدالة لاجراء التحقق على اكثر من مدى
كود PHP:
<?php
$userIp = '220.111.3.45';
$rangesArr = array('220.111.3.45' , '220.111.8.45' , '220.[100-200].3.45' , '220.*.[1-4].45');
foreach($rangesArr as $range){
if(ipInRange($userIp , $range) ){
echo "$range : نعم <br>";
}
else{
echo "$range : لا <br>";
}
}
?>