xamelion
11-09-2005, 22:53
задача стоит так:
из БД mysql вытащить айпи адреса которые хранятся вот в таком виде "209861637" перевести их в hex и по 2 первым символам вывести dec
пример на вин калькулятере
вводим цифру 209861637
переводим в hex
получаем C823C05
затем каждые 2 символа переводим обратно в dec
C8 = 200
23 = 35
С0 = 192
5 = 5
для облегчения задачи пишу функцию
<?
/////////////////////////////////////////////
function dec_hex_ip($dec_ip)
{
$ip_hex = dechex($dec_ip);
$var_while = 3;
$i_while = 0;
$a_while = 0;
do
{
$ip_done_hex[$i_while] = substr($ip_hex, $a_while, 2);
$ip_done_dec[$i_while] = hexdec($ip_done_hex[$i_while]);
$a_while = $a_while + 2;
}
while(++$i_while <= $var_while);
$ip_done = implode(".", $ip_done_dec);
return $ip_done;
};
////////////////////////////////////////////////
?>
затем функцию крепим в коду, который вытаскивает из БД все уникальные значения. (т.е. которые не могут быть одинаковые)
function show_ip()
{
include "connect_db.php";
$result = mysql_query("SELECT DISTINCT ip_saddr FROM ulog", $linkdb)
or die ("Invalid query");
while ($row = mysql_fetch_array($result /*MYSQL_NUM*/)) {
echo dec_hex_ip($row[0])."<BR>";
echo $row[0]."<BR>";
}
}
запускаем все это дело и видим что после 114 строки видим вот такие значения
1412799023
84.204.14.14
1422659086
84.252.146.10
1425838602
127.0.0.1
2130706433
127.255.255.255 <-------- 114 строка.
2204857116
127.255.255.255
2362681035
127.255.255.255
2560872505
127.255.255.255
для проверки работоспособность функции копируем только всю функцию в другой файл и запускаем только его со значениями которые выше
<?
/////////////////////////////////////////////
function dec_hex_ip($dec_ip)
{
$ip_hex = dechex($dec_ip);
$var_while = 3;
$i_while = 0;
$a_while = 0;
do
{
$ip_done_hex[$i_while] = substr($ip_hex, $a_while, 2);
$ip_done_dec[$i_while] = hexdec($ip_done_hex[$i_while]);
$a_while = $a_while + 2;
}
while(++$i_while <= $var_while);
$ip_done = implode(".", $ip_done_dec);
return $ip_done;
};
////////////////////////////////////////////////
echo "<br>".dec_hex_ip(1412799023);
echo "<br>".dec_hex_ip(1422659086);
echo "<br>".dec_hex_ip(1425838602);
echo "<br>".dec_hex_ip(2130706433);
echo "<br>".dec_hex_ip(2204857116);
echo "<br>".dec_hex_ip(2362681035);
echo "<br>".dec_hex_ip(2560872505);
?>
и видим вот такой результат
84.53.154.47
84.204.14.14
84.252.146.10
127.0.0.1
131.107.115.28
140.211.166.203
152.163.208.57
для точной проверки проверяем на тип и количество строк данные поступающие из БД, и ненаходим ошибок...
так в чем ошибка? неправильная интерпритация движка php ?
из БД mysql вытащить айпи адреса которые хранятся вот в таком виде "209861637" перевести их в hex и по 2 первым символам вывести dec
пример на вин калькулятере
вводим цифру 209861637
переводим в hex
получаем C823C05
затем каждые 2 символа переводим обратно в dec
C8 = 200
23 = 35
С0 = 192
5 = 5
для облегчения задачи пишу функцию
<?
/////////////////////////////////////////////
function dec_hex_ip($dec_ip)
{
$ip_hex = dechex($dec_ip);
$var_while = 3;
$i_while = 0;
$a_while = 0;
do
{
$ip_done_hex[$i_while] = substr($ip_hex, $a_while, 2);
$ip_done_dec[$i_while] = hexdec($ip_done_hex[$i_while]);
$a_while = $a_while + 2;
}
while(++$i_while <= $var_while);
$ip_done = implode(".", $ip_done_dec);
return $ip_done;
};
////////////////////////////////////////////////
?>
затем функцию крепим в коду, который вытаскивает из БД все уникальные значения. (т.е. которые не могут быть одинаковые)
function show_ip()
{
include "connect_db.php";
$result = mysql_query("SELECT DISTINCT ip_saddr FROM ulog", $linkdb)
or die ("Invalid query");
while ($row = mysql_fetch_array($result /*MYSQL_NUM*/)) {
echo dec_hex_ip($row[0])."<BR>";
echo $row[0]."<BR>";
}
}
запускаем все это дело и видим что после 114 строки видим вот такие значения
1412799023
84.204.14.14
1422659086
84.252.146.10
1425838602
127.0.0.1
2130706433
127.255.255.255 <-------- 114 строка.
2204857116
127.255.255.255
2362681035
127.255.255.255
2560872505
127.255.255.255
для проверки работоспособность функции копируем только всю функцию в другой файл и запускаем только его со значениями которые выше
<?
/////////////////////////////////////////////
function dec_hex_ip($dec_ip)
{
$ip_hex = dechex($dec_ip);
$var_while = 3;
$i_while = 0;
$a_while = 0;
do
{
$ip_done_hex[$i_while] = substr($ip_hex, $a_while, 2);
$ip_done_dec[$i_while] = hexdec($ip_done_hex[$i_while]);
$a_while = $a_while + 2;
}
while(++$i_while <= $var_while);
$ip_done = implode(".", $ip_done_dec);
return $ip_done;
};
////////////////////////////////////////////////
echo "<br>".dec_hex_ip(1412799023);
echo "<br>".dec_hex_ip(1422659086);
echo "<br>".dec_hex_ip(1425838602);
echo "<br>".dec_hex_ip(2130706433);
echo "<br>".dec_hex_ip(2204857116);
echo "<br>".dec_hex_ip(2362681035);
echo "<br>".dec_hex_ip(2560872505);
?>
и видим вот такой результат
84.53.154.47
84.204.14.14
84.252.146.10
127.0.0.1
131.107.115.28
140.211.166.203
152.163.208.57
для точной проверки проверяем на тип и количество строк данные поступающие из БД, и ненаходим ошибок...
так в чем ошибка? неправильная интерпритация движка php ?