Autor | Zpráva | ||
---|---|---|---|
okoun Profil |
#1 · Zasláno: 18. 3. 2017, 13:50:23
ahoj, mám problém s tímto testovacím kodem vypíše se mi pouze "a" a dalšího už nic pokud odstraním vlnovka neboli tildu tak se napíše "b" "c" až zase narazí na další vlnovku :) Co to jako má být? Chápete někdo
<?php echo 'a'; $charWC = ~$charMask; echo 'b'; $charNet = $charHost & $charMask; echo 'c'; $charBcst = $charNet | ~$charMask; echo 'd'; $charHostMin = $charNet | ~$charHostMask; echo 'e'; $charHostMax = $charBcst & $charHostMask; echo 'f'; ?> |
||
Keeehi Profil |
#2 · Zasláno: 18. 3. 2017, 14:00:04
okoun:
Začni zapnutím vypisování chybových hlášek, ale pokud pominu ty neinicializované proměnné (mohou být nastavené někde před tím), pak je vše v pořádku. 3v4l.org/K6pDT |
||
okoun Profil |
#3 · Zasláno: 18. 3. 2017, 14:23:54
Keeehi:
Nu píše mi to u té první vlnovky Fatal error: Unsupported operand types in /var/www/ipcalc.php on line |
||
Alphard Profil |
#4 · Zasláno: 18. 3. 2017, 15:22:24
okoun [#3]:
A co v té proměnné je? Dejte sem kompletní kód. |
||
okoun Profil |
#5 · Zasláno: 18. 3. 2017, 15:26:43
Alphard:
kompletní kod je zde: echo ' <fieldset> <legend>Nový IPv6 pool</legend> <form method="post" action=""> <table> <tr> <td>SÃÅ¥ IPv6 na rozdÄlenÃ:</td> <td><input type="text" name="network" value="'.$_REQUEST['network'].'" size="31" maxlength="64"></td> <td><input type="submit" value="spoÄÃtej" name="subnetcalc"></td> </tr> <tr> <td>Maska pro zákaznÃky:</td> <td><input type="text" name="subnet" value="'.$_REQUEST['subnet'].'" size="18" maxlength="64"></td> <td><input type="submit" value="spoÄÃtej" name="subnetcalc"></td> </tr> </table></form><br>'; //Start table print "<table cellpadding=\"2\">\n<COL span=\"4\" align=\"left\">\n" ; $end='</table><table width="95%" align=center cellpadding=2 cellspacing=2 border=0> <tr><td bgcolor="#999999"></td><tr><td align="center"><a href="http://validator.w3.org/check/referer"> <img border="0" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" height="31" width="88"></a> </td></tr></table></center></body></html>'; if (empty($_REQUEST['network'])){ tr('Use IP/Network & CIDR Netmask: ', '10.0.0.1/22'); print $end ; exit ; } function tr(){ echo "\t<tr>"; for($i=0; $i<func_num_args(); $i++) echo "<td>".func_get_arg($i)."</td>"; echo "</tr>\n"; } //ini_set('display_errors',1); $maxSubNets = '12048'; // Stop memory leak from invalid input or large ranges $superNet = $_REQUEST['network']; $superNetMask = ''; // optional $subNetCdr = $_REQUEST['subnet']; $subNetMask = ''; // optional // Calculate supernet mask and cdr if (ereg('/',$superNet)){ //if cidr type mask $charHost = inet_pton(strtok($superNet, '/')); $charMask = _cdr2Char(strtok('/'),strlen($charHost)); } else { $charHost = inet_pton($superNet); $charMask = inet_pton($superNetMask); } // Single host mask used for hostmin and hostmax bitwise operations $charHostMask = substr(_cdr2Char(127),-strlen($charHost)); $charWC = ~$charMask; // Supernet wildcard mask $charNet = $charHost & $charMask; // Supernet network address $charBcst = $charNet | ~$charMask; // Supernet broadcast $charHostMin = $charNet | ~$charHostMask; // Minimum host $charHostMax = $charBcst & $charHostMask; // Maximum host // Print Results tr('Network:','<font color="blue">'.inet_ntop($charNet)."/"._char2Cdr($charMask)."</font>"); tr('Netmask:','<font color="blue">'.inet_ntop($charMask)." = /"._char2Cdr($charMask)."</font>"); tr('Wildcard:', '<font color="blue">'.inet_ntop($charWC).'</font>'); tr('Broadcast:', '<font color="blue">'.inet_ntop($charBcst).'</font>'); tr('HostMin:', '<font color="blue">'.inet_ntop($charHostMin).'</font>'); tr('HostMax:', '<font color="blue">'.inet_ntop($charHostMax).'</font>'); // Calculate subnet mask and cdr if ($subNetCdr) { preg_match('/\d+/',$subNetCdr,$cdr); $subNetCdr = $cdr[0]; $charSubMask = _cdr2Char($subNetCdr,strlen($charHost)); $charSubWC = ~$charSubMask; // Subnet wildcard mask $superNetMask = inet_ntop($charSubMask); } else { print "$end"; exit; } // Convert to unsigned short so we can do some math $intNet=_unpackBytes($charNet); $intSubWC=_unpackBytes($charSubWC); // Set up initial subnet address, it will be the same as the supernet address $intSub = $intNet; $charSub = $charNet; $charSubs = array(); // Generate adjacent subnets until we leave the supernet $n = 0; while ((($charSub & $charMask) == $charNet) && $n < $maxSubNets) { array_push($charSubs,$charSub); $intSub = _addBytes($intSub,$intSubWC); $charSub = _packBytes($intSub); $n++; } echo '<tr><td colspan="2" bgcolor="#999999"></td><tr>'; // Output result $pocet = 0; foreach ( $charSubs as $charSub ) { tr('ZákaznÃk:','<font color="blue"><a href="?network='.urlencode(inet_ntop( $charSub)."/"._char2Cdr($charSubMask)).'">'.inet_ntop( $charSub)."/"._char2Cdr($charSubMask)."</a></font>"); $pocet++; } print "$end IP adres: $pocet"; exit; // Convert array of short unsigned integers to binary function _packBytes($array) { foreach ( $array as $byte ) { @$chars .= pack('C',$byte); } return $chars; } // Convert binary to array of short integers function _unpackBytes($string) { return unpack('C*',$string); } // Add array of short unsigned integers function _addBytes($array1,$array2) { $result = array(); $carry = 0; foreach ( array_reverse($array1,true) as $value1 ) { $value2 = array_pop($array2); if ( empty($result) ) { $value2++; } $newValue = $value1 + $value2 + $carry; if ( $newValue > 255 ) { $newValue = $newValue - 256; $carry = 1; } else { $carry = 0; } array_unshift($result,$newValue); } return $result; } /* Useful Functions */ function _cdr2Bin ($cdrin,$len=4){ if ( $len > 4 || $cdrin > 32 ) { // Are we ipv6? return str_pad(str_pad("", $cdrin, "1"), 128, "0"); } else { return str_pad(str_pad("", $cdrin, "1"), 32, "0"); } } function _bin2Cdr ($binin){ return strlen(rtrim($binin,"0")); } function _cdr2Char ($cdrin,$len=4){ $hex = _bin2Hex(_cdr2Bin($cdrin,$len)); return _hex2Char($hex); } function _char2Cdr ($char){ $bin = _hex2Bin(_char2Hex($char)); return _bin2Cdr($bin); } function _hex2Char($hex){ return pack('H*',$hex); } function _char2Hex($char){ $hex = unpack('H*',$char); return array_pop($hex); } function _hex2Bin($hex){ $bin=''; for($i=0;$i<strlen($hex);$i++) $bin.=str_pad(decbin(hexdec($hex{$i})),4,'0',STR_PAD_LEFT); return $bin; } function _bin2Hex($bin){ $hex=''; for($i=strlen($bin)-4;$i>=0;$i-=4) $hex.=dechex(bindec(substr($bin,$i,4))); return strrev($hex); } echo $pocet; echo ' <br/> <table class="tftable" border="1" width="500px"> <tr><th>Název</th><th>Síť</th><th>Maska</th></tr>'; $s_sipv4 = mysql_query("SELECT * FROM `ipv4pool` "); while ( $sipv4 = mysql_fetch_assoc($s_sipv4) ) { echo '<tr> <td>'.$sipv4['nazev'].'</td> <td>'.$sipv4['network'].'</td> <td>'.$sipv4['maska'].'</td> </tr>'; } echo '</table> </fieldset>'; } jedná se o ipv6 kalkulačku která potom rozděluje na daný subnet. bohužel ale nejde mi to zakomponovat do kodu protože vše za tou vlnovkou odmítá fungovat..... |
||
TomášK Profil |
#6 · Zasláno: 18. 3. 2017, 15:42:38
$charMask je řetězec, ~ je binární negace - operace, která pro řetězec nedává smysl.
|
||
okoun Profil |
#7 · Zasláno: 18. 3. 2017, 16:27:38
TomášK:
bohužel netuším, nejsem autotrem a hodně věcem tam nerozumím :( funkční to je tady djlab.com/stuff/ipcalc.php já jsem si to chtěl jen zakomponjovat do svého systému nic víc, ale bohužel to právě moc zakomponovávat nejde :( |
||
Davex Profil |
#8 · Zasláno: 18. 3. 2017, 19:09:35
okoun:
Zřejmě je logická chyba ve čtení vstupních dat. Příčinou nefunkčnosti je tato kombinace, která se snaží převést prázdnou hodnotu: $superNetMask = ''; // optional $charMask = inet_pton($superNetMask); |
||
Časová prodleva: 7 let
|
0