Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ВЫбрать свободный IP
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » ВЫбрать свободный IP

Страниц (1): [1]
 

1. tramX - 11 Мая, 2011 - 00:36:39 - перейти к сообщению
Здравствуйте. Нужно выбрать свободный IP

Занес все данные о занятых IP в массив а
$a = array();

do
{
$el = $myrow_user[ip_user];
array_push($a, $el);
}
while ($myrow_user = mysql_fetch_array($result_user));

Теперь нужно перебрать IP из одной подсети, как только ip не будет обнаружен в массиве а, занести его в переменную.

Как это сделать?
2. Viper - 11 Мая, 2011 - 07:48:03 - перейти к сообщению
3. DeepVarvar - 11 Мая, 2011 - 07:54:07 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $ips = array("массив айпишников");
  2. $new = true;
  3. $addip = "127.0.0.1"; // добавляемый
  4. foreach ($ips as $ip) {
  5.   if ($ip == $addip) {
  6.     $new = false;
  7.     break;
  8.     }
  9.   }
  10. if ($new) {
  11.   // процедура добавления
  12.   }
4. tramX - 11 Мая, 2011 - 10:36:41 - перейти к сообщению
Это получится я массив сравню с одним ИП адресом, а мне нужно сравнивать с каждым ИП из подсети, например.
массив $а = 192.168.4.2, 192.168.4.3, 192.168.4.4
и подсеть 192.168.4.2, 192.168.4.3, 192.168.4.4, 192.168.4.5 ... 192.168.4.254

Получается как только дойдет до 192.168.4.5 его нет в массиве a, значит занести его в переменную иостановить, дальнейшую проверку.
5. EuGen - 11 Мая, 2011 - 11:20:49 - перейти к сообщению
Делайте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. /*
  3. $rgIPs=array('192.168.2.1','192.168.2.2','192.168.2.3','192.168.2.5');
  4. $rgSubnet=array('net'=>'192.168.2.0','mask'=>24);
  5. */
  6. function searchIP($rgIPs, $rgSubnet)
  7. {
  8.    $rgLongs=array_map(create_function('$ip', 'return sprintf("%u", ip2long($ip));'), $rgIPs);
  9.    $rgSubnets=range(sprintf("%u", ip2long($rgSubnet['net']))+1, sprintf("%u", ip2long($rgSubnet['net']))+pow(2,32-$rgSubnet['mask'])-1);
  10.    $rgResult=array_diff($rgSubnets, $rgLongs);
  11.    if(!count($rgResult))
  12.    {
  13.       return null;
  14.    }
  15.    return long2ip(array_shift($rgResult));
  16. }
  17. //usage:
  18. $rgIPs=array('192.168.2.1','192.168.2.2','192.168.2.3','192.168.2.5');
  19. $rgSubnet=array('net'=>'192.168.2.0','mask'=>24);
  20. $ip=searchIP($rgIPs, $rgSubnet);
  21.  

 

Powered by ExBB FM 1.0 RC1