@HeartOfProgrammer

Как создать код генерирующий блок список ip адресов?

Всем привет ребята! Мне дали задания:

Написать код генерирующий блок список ip адресов 127,0,0,0 - 127,0,255,255. Сделать несколько вариантов генерирующего кода. Результат записывать налету в файл в начало файла, каждый ip с новой строки, разделитель строк unix-типа. Выяснить какой вариант это делает быстрее (так же в коде).
Для решения этой задачи могут потребоваться как минимум конструкции и функции for,foreach,iptolong,fwrite,microtime().

Надо сделать генерацию ip адресов, каждый ip адрес с новой строки (
). Я попробовал сделать что-то подобное но не получилось. Я не прошу вас дать готовый код, я прошу вас кинуть ссылку где это все делать, я просто не понимаю как через цикл можно все это осуществить.

Мой код:
<?php
	for ($i=0;$i<256;$i++) {
		for ($e=0;$e<256;$e++) {
			$data[] = '127.0.' . $i . '.' . $e;
		}
	}
	var_dump($data);
?>
  • Вопрос задан
  • 487 просмотров
Решения вопроса 1
Pjeroo
@Pjeroo
Веб-разработчик
Есть функции long2ip и ip2long. Берите ip из диапазона и делайте из них число, затем в цикле проходите и генерируйте ip по числу. Все просто:
php.net/manual/ru/function.long2ip.php
php.net/manual/ru/function.ip2long.php

И не нужно никаких велосипедов с переборами. Таким образом можно любой диапазон напечатать.

UPD:
$from = ip2long('127.0.0.1');
$to = ip2long('127.0.255.255');

while ($from++ < $to)    
echo long2ip($from) . "\r\n";
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
<?php 
$fp = fopen('/tmp/data.txt', 'w');
for ($i = ip2long("127.0.0.0");$i <= ip2long("127.0.255.255");$i++){
  $ip = long2ip($i)."\n";
   fwrite($fp,$ip);
 }
fclose($fp);
?>

потом в консоли та можно набрать head /tmp/data.txt
code.runnable.com/new/PHP
Ответ написан
woonem
@woonem
<?php

//ВАРИАНТ 1

 $start = microtime(true); 

 $i1=127; $i2=0; $i3=0; $i4=1; //здесь начало диапазона
 $a1=127; $a2=0; $a3=255; $a4=255; //здесь конец диапазона
 $o1=$i1; $o2=$i2; $o3=$i3; $o4=$i4;

 for( ; ; ){

  file_put_contents('./1.iplist', $o1.'.'.$o2.'.'.$o3.'.'.$o4."\n", FILE_APPEND); //здесь запись

  $o4++;
  if($i3<$a3 or $i2<$a2 or $i1<$a1){
   if($o4>255){
    $o3++;
    if($i2<$a2 or $i1<$a1){
     if($o3>255){
      $o2++;
      if($i1<$a1){
       if($o2>255){
        $o1++;
        if($o1>$a1){
         break;
        }
        $o2=0;
       }
      }elseif($o2>$a2){
       break;
      }
      $o3=0;
     }
    }elseif($o3>$a3){
     break;
    }
    $o4=0;
   }
  }elseif($o4>$a4){
   break;
  }
 }

 echo 'Вариант 1: '.(microtime(true) - $start).' сек. '.filesize('./1.iplist')." Байт\n";


//ВАРИАНТ 2

 $start = microtime(true);

 for ($i=0; $i<=255; $i++) {
  for ($e=0; $e<=255; $e++) {
    file_put_contents('./2.iplist', '127.0.'.$i.'.'.$e."\n", FILE_APPEND); //здесь запись
  }
 }

 echo 'Вариант 2: '.(microtime(true) - $start).' сек. '.filesize('./2.iplist')." Байт\n";


//ВАРИАНТ 3

 $start = microtime(true);

 $from=ip2long('127.0.0.1');
 $to=ip2long('127.0.255.255');
 while($from++<=$to)
  file_put_contents('./3.iplist', long2ip($from-1)."\n", FILE_APPEND); //здесь запись

 echo 'Вариант 3: '.(microtime(true) - $start).' сек. '.filesize('./3.iplist')." Байт\n";

?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы