IPv6 toolkit PHP-hoz

 ( janoszen | 2011. május 26., csütörtök - 23:23 )

Miután meguntam, hogy az IPv6-os címek kezelésére nincs normális toolkit a PHP-ban, elkezdtem gyártani egyet. Ezúton invitálok mindenkit, hogy tesztelje, küldjön hozzá feature requesteket. A kód maga angolul van dokumentálva és 100%-os code coverage-el büszkélkedhet.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Lebuktam. :) Igen, egy kis takeaway lesz. Ha marad egy kis időm, csinálok egy minimál tűzfalat is.

Én sem találkoztam még hasonlóval, jó lett! És köszi, hogy megosztottad! A technikai részéhez nem tudok hozzászólni, mert nem teszteltem. A kódhoz viszont lenne egy megjegyzésem, mert szerintem egy kicsit túlbonyolítottad.

A $part1 … $part4 és $part8 helyett én egy darab $parts-ot használnék, amely egy tömb lenne. A hosszú preg_match-ek helyett pedig:

if(filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
    $parts = explode(':', $address);
}

Más részeket is lehet egyszerűsíteni, pl.:

if ((int)$matches['part1'] > 255 || (int)$matches['part2'] > 255 || (int)$matches['part3'] > 255 || (int)$matches['part4'] > 255) {
    throw new INETAddressFormatError($address);
}

helyett:

if(max($parts) > 255) {
    throw new INETAddressFormatError($address);
}

Nem kötözködés képpen írtam ezeket, hanem javaslatként, sokkal átláthatóbbá teszik a kódot.

Részben igazad van, mivel ez csak egy nagyon első változat, részben viszont szándékos. Nálam már régóta policy, hogy a PHP-ból az alapvető nyelvi elemek kivételével minél kevesebbet használjak, így a filter is blacklistre került részben mert volt benne vuln (holott pont ennél kellett volna kínosan odafigyelni), másrészt szeretem, ha a kód lekövethető. Az INET4 és INET6 osztályokból majd össze akarom vonni a közös részekez, akkor talán nem tűnik majd tùlbonyolításnak.

Viszont a php saját függvényei natív függvények, tehát sokkal gyorsabban futnak, mint a php kód.

--
Don't be an Ubuntard!

Tény, de ha nagyon zavar az overhead, átírom az egészet C-be. Vagy nem használok PHP-t.

Btw. szerintem a fenti kód nem működik, ha a PHP IPv6 nélkül van forgatva, viszont ettől függetlenül akarhat valaki IPv6 címekkel dolgozni.

typo bug: src/INET6Address.php#L56

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Köszi, javítva.

Update: betoltam egy csomó függvényt cím típus ellenőrzésre az alapján, ami infót össze tudtam szedni. Nem vagyok 100%-ig biztos benne, hogy minden címtartomány helyesen van megadva, aki teheti, légyszi nézze át / tesztelje!