Autor Zpráva
okoun
Profil
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
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
Keeehi:
Nu píše mi to u té první vlnovky Fatal error: Unsupported operand types in /var/www/ipcalc.php on line
Alphard
Profil
okoun [#3]:
A co v té proměnné je? Dejte sem kompletní kód.
okoun
Profil
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:&nbsp;', '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
$charMask je řetězec, ~ je binární negace - operace, která pro řetězec nedává smysl.
okoun
Profil
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
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);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: