30. maj 2003 - 23:22
Der er
21 kommentarer og 1 løsning
funktion til udskrift af ip m.m.
Hvordan kan jeg udskrive alle ip numre mellem eks. 20.20.20.20 og 20.20.21.100 Der må ikke udskrives ip nummer som ikke er gyldigt ! ( eks. 200.10.20.400 ) Gerne som en funktion, der retunere et array.. any one ?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Nå har fundet en løsning selv..
som god ånd skriver man normalt løsningen så andre kan få glæde af den sener hen... Morten
tjaa, her er det så... function AddNULL( $l ) { while ( strlen($l) != 3 ) $l = "0".$l; return $l; } function AddIP( $ip1 , $ip2 ) { $ip1 = explode(".", $ip1 ); $ip11 = $ip1[0]; $ip12 = $ip1[1]; $ip13 = $ip1[2]; $ip14 = $ip1[3]; $ip2 = explode(".", $ip2 ); $ip21 = $ip2[0]; $ip22 = $ip2[1]; $ip23 = $ip2[2]; $ip24 = $ip2[3]; for($i = 1; $i <= 2; $i++) { //${'ip'.$i} = explode(".", ${'ip'.$i} ); for($j = 1; $j <= 4; $j++) { //${'ip'.$i.$j} = ${'ip'.$i.'\['.$j.'\]'}; while ( strlen(${'ip'.$i.$j}) != 3 ) ${'ip'.$i.$j} = "0".${'ip'.$i.$j}; } } $fromIP = AddNULL($ip11).AddNULL($ip12).AddNULL($ip13).AddNULL($ip14); $toIP = AddNULL($ip21).AddNULL($ip22).AddNULL($ip23).AddNULL($ip24); while ( $fromIP <= $toIP ) { $ip[] = round( $ip11 ) . "." . round( $ip12 ) . "." . round( $ip13 ) . "." . round( $ip14 ); if ( $ip14 + 1 < 256 ) { $ip14 = AddNULL( $ip14 + 1 ); } else { $ip14 = "001"; if ( $ip13 + 1 < 256 ) { $ip13 = AddNULL( $ip13 + 1 ); } } $fromIP = AddNULL($ip11).AddNULL($ip12).AddNULL($ip13).AddNULL($ip14); } return $ip; }
OK... må kunne laves kortere... <?php $IPs = array(); for($i=0;$i<=255;$i++){ for($ii=0;$ii<=255;$ii++){ for($iii=0;$iii<=255;$iii++){ for($iiii=0;$iiii<=255;$iiii++){ $IPs[] = $i . "." . $ii . "." . $iii . "." . $iiii; } } } } // så indeholder $IPs et array med samtlige IPer... // testning af disse: echo "der er " . count($IPS) . " IPer i arrayet...<br><br>Disse er: <br>"; foreach($IPS AS $no=>$ip){ echo $no . ": " . $ip; } ?> Morten
hov, der skal stå $IPs i foreach løkken ;)
de værste fejl rettet + pænere opstilling: <?php $IPs = array(); for($i=0;$i<=255;$i++){ for($ii=0;$ii<=255;$ii++){ for($iii=0;$iii<=255;$iii++){ for($iiii=0;$iiii<=255;$iiii++){ $IPs[] = $i . "." . $ii . "." . $iii . "." . $iiii; } } } } // så indeholder $IPs et array med samtlige IPer... // testning af disse: echo "der er " . count($IPs) . " IPer i arrayet...\n<br><br>Disse er: <br>\n\n"; foreach($IPs AS $no=>$ip){ echo $no . ": " . $ip . "<br>\n"; } ?> men læg mærke til at det script kommer til at tage LANG tid at gennemføre... der er jo pisse mange IPer... jeg lavede det hvor IPer "kun" kunne være i intervallet 0.0.0.0 - 25.25.25.25, og det er godt ½ mio. IPer... Morten
ideen kan jeg ikke lige se, men kan du evt. fikse denne lille bug: jeg har to arrays som hedder ip1 og ip2, de kan explodes via: ${'ip'.$i} = explode(".", ${'ip'.$i} ); nu ville jeg gerne ha' fat i det array via noget ala: ${'ip'.$i.$j} = ${'ip'.$i.'\['.$j.'\]'}; .. men det virker ik! for($i = 1; $i <= 2; $i++) { //${'ip'.$i} = explode(".", ${'ip'.$i} ); for($j = 1; $j <= 4; $j++) { //${'ip'.$i.$j} = ${'ip'.$i.'\['.$j.'\]'}; while ( strlen(${'ip'.$i.$j}) != 3 ) ${'ip'.$i.$j} = "0".${'ip'.$i.$j}; } }
prøv lige min funktion med ip1 = "20.20.20.20" og ip2 = "20.20.23.100" ..got it yet ?
et array kan ikke explodes, det kan imploades... en streng kan explodes... Morten
denne line: ${'ip'.$i} = explode(".", ${'ip'.$i} ); virker fint.. men jeg kan ikke få fat i eks. $ip1[2] via denne line: ${'ip'.$i.$j} = ${'ip'.$i.'\['.$j.'\]'};
OK... så modder vi den lidt så man kan angive et interval... 2 sek... Morten
.. by the way, læs lige mit spg igen.. jeg skulle jo finde all ip'er mellem 2 ip's.!
havde jeg lige overset... men dette er stadig kortere... <?php function GimmeIP($intStart, $intSlut){ $arr = explode(".", $intStart); $IPs = array(); for($i=$arr[0];$i<=255;$i++){ for($ii=$arr[1];$ii<=255;$ii++){ for($iii=$arr[2];$iii<=255;$iii++){ for($iiii=$arr[3];$iiii<=255;$iiii++){ $ip = $i . "." . $ii . "." . $iii . "." . $iiii; if($ip == $intSlut){ $break = true; break; } $IPs[] = $ip; } if($break) break; } if($break) break; } if($break) break; } return $IPs; } $IPer = GimmeIP("20.20.10.0","20.20.20.10"); // så indeholder $IPer et array med samtlige IPer mellem 20.20.10.0 og 20.20.20.10 // testning af disse: echo "der er " . count($IPer) . " IPer i arrayet...\n<br><br>Disse er: <br>\n\n"; foreach($IPer AS $no=>$ip){ echo $no . ": " . $ip . "<br>\n"; } ?> Morten
hov, funktionen skal være sådan he: function GimmeIP($intStart, $intSlut){ $arr = explode(".", $intStart); $IPs = array(); for($i=$arr[0];$i<=255;$i++){ for($ii=$arr[1];$ii<=255;$ii++){ for($iii=$arr[2];$iii<=255;$iii++){ for($iiii=$arr[3];$iiii<=255;$iiii++){ $ip = $i . "." . $ii . "." . $iii . "." . $iiii; $IPs[] = $ip; if($ip == $intSlut){ $break = true; break; } } if($break) break; } if($break) break; } if($break) break; } return $IPs; } Morten
tjaa, $IPer = GimmeIP("20.20.10.100","20.20.20.10"); retunere: Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 10 bytes) det er jo ikke så cool, vel :-) .. test min funktion, den virker ...
.. som du kan se på tidspunket for mit spg og svar, kan du se at jeg har brugt en rum tid på at leget med arrays. problemet er at et array ikke godkender eks 010, det bliver lavet om til 10. Derfor har jeg lavet det om til en string.! > codeb@se.dk
sådan... den skulle lige fejl-testes lidt... function GimmeIP($intStart, $intSlut){ $arr = explode(".", $intStart); $IPs = array(); $break = false; for($i=$arr[0];$i<=255;$i++){ for($ii=$arr[1];$ii<=255;$ii++){ $arr[1] = 0; for($iii=$arr[2];$iii<=255;$iii++){ $arr[2] = 0; for($iiii=$arr[3];$iiii<=255;$iiii++){ $arr[3] = 0; $ip = $i . "." . $ii . "." . $iii . "." . $iiii; $IPs[] = $ip; if($ip == $intSlut){ $break = true; break; } } if($break) break; } if($break) break; } if($break) break; } return $IPs; } Morten
NU hedder IP jo også fx 192.168.0.1... og ikke 192.168.000.001 Morten
det ser ud til at din funktion virker nu, jeg bruger jo også denne line til at fjerne det 0 igen. $ip[] = round( $ip11 ) . "." . round( $ip12 ) . "." . round( $ip13 ) . "." . round( $ip14 );
kunne men ikke: function GimmeIP($intStart, $intSlut){ $arr = explode(".", $intStart); $IPs = array(); $break = false; for($i=$arr[0];$i<=255;$i++){ for($ii=$arr[1];$ii<=255;$ii++){ $arr[1] = 0; for($iii=$arr[2];$iii<=255;$iii++){ $arr[2] = 0; for($iiii=$arr[3];$iiii<=255;$iiii++){ $arr[3] = 0; $ip = $i . "." . $ii . "." . $iii . "." . $iiii; $IPs[] = $ip; if($ip == $intSlut){ return $IPs; } } } } } }
jo det kunne man, men så vil løkken forsætte, og så vil du have ALT for mange IPer... og et alt for stort RAM forbrug... Morten
Vi tilbyder markedets bedste kurser inden for webudvikling