Script-Tuning - Was könnte verbessert werden?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Script-Tuning - Was könnte verbessert werden?

    Ich habe mir eine Funktion erstellt, die eine IP-Adresse in die entsprechende IP-Dezimalzahl umrechnet bzw. umgekehrt.

    Das Skript funktioniert fehlerfrei, aber vielleicht kann man an der Syntax noch ein wenig tunen. Hat jemand Vorschläge?

    Code:
    <?
    function ipconvert($ip) {
    // Rechnet IP-Adresse in IP-Dezimalzahl um bzw. umgekehrt
    //
    // Author: 	hand
    // Date: 	Jan. 2002
    // 
    // Aufruf 	ipconvert("1.1.1.1") 	liefert Ergebnis 	16843009
    // 			ipconvert("16843009") 	liefert Ergebnis 	1.1.1.1
    //			ipconvert("1.1.1.0/16") liefert Ergebnis 	16842752@16908287
    //										entspricht:	1.1.0.0 - 1.1.255.255
    //
    // Seperator für den Fall der Angabe 0/8, 0/16, 0/32
    	$seper = "@";
    	$exp   = explode('.',$ip); 
    	if ($exp[0]<=255 && $exp[1]<=255 && $exp[2]<=255 && ($exp[3]<=255 || strpos($exp[3],'0/')) && preg_match("!^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!",$ip)) { 
    			switch ($exp[3]) {
    			case "0/32":
    				$resf = $exp[0]*pow(256,3) + $exp[1]*pow(256,2) + $exp[2]*256;
    				$resb = $resf + 255*pow(256,0);
    				$resb = $seper . $resb;		
    				break;
    			case "0/16":
    				$resf = $exp[0]*pow(256,3) + $exp[1]*pow(256,2);
    				$resb = $resf + 255*pow(256,0) + 255*pow(256,1);
    				$resb = $seper . $resb;					
    				break;
    			case "0/8":
    				$resf = $exp[0]*pow(256,3);
    				$resb = $resf + 255*pow(256,0) + 255*pow(256,1) + 255*pow(256,2);
    				$resb = $seper . $resb;
    				break;
    			default:
    				$resf = $exp[0] * pow(256,3) + $exp[1] * pow(256,2) + $exp[2] * 256 + $exp[3];
    			}
    	} else {
    		$exp = explode($seper,$ip);
    		if ($exp[0] <= (pow(256,4)-1) && preg_match("!^([0-9]{1,10})$!",$exp[0])) {
        			$ip0 = intval(( $exp[0]										)/pow(256,3));
        			$ip1 = intval(( $exp[0] - $ip0*pow(256,3)					)/pow(256,2));
       				$ip2 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2)	)/pow(256,1));
        			$ip3 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2) - $ip2*pow(256,1) )%pow(256,1));
    			switch ($exp[1] - $exp[0]) {
    			case (pow(256,1) - 1):
    				$resf = "$ip0.$ip1.$ip2.0/32";		
    				break;
    			case (pow(256,2) - 1):
    				$resf = "$ip0.$ip1.$ip2.0/16";		
    				break;
    			case (pow(256,3) - 1): 
    				$resf = "$ip0.$ip1.$ip2.0/8";		
    				break;
    			default:
    				$resf = "$ip0.$ip1.$ip2.$ip3";
    			}
    		}
    	}
    	return "${resf}${resb}";
    }
    print "$ip ->  ". ipconvert($ip). "  ->  " .ipconvert(ipconvert($ip));
    ?>

  • #2
    Den Punkt musst du wohl escapen.

    !^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!

    CAT Music Files

    Kommentar

    Lädt...
    X