Войти

Показать полную графическую версию : бага в самом PHP или подругому описать немогу


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 ?

Vlad Drakula
12-09-2005, 11:43
xamelion
а спец функцией сложно воспользоваться?

benya
12-09-2005, 12:10
Еще б в рубли перевел :tease:

xamelion
12-09-2005, 17:00
да и в рубли переведем.. +)
а что за спец функция... я же за php 4 день...

Vlad Drakula
12-09-2005, 17:08
xamelion
а вы уже установили хелп с ОФФ сайта PHP ?

xamelion
12-09-2005, 19:37
неа... у меня RPMы с FC3 и я там ничего не менял.
мне просто интересен сам факт того что функция отдельна работает, и притензий нет.. однако когда она работает с большими объемами информаци случается бага.. допустим я щас использую функцию ту, которая уже есть в php(хотя если ее кто нить напишет мне, будет вообще замечательно) однако... мне интересен в чем же ошибка, для того что бы не наступить в те же грабли. Для меня важно в данный момент именно ошибка, без разници моя это или php. я учусь писать, и попадись такая ситуация в другой ситуации можно и незаметить ошибку, т.к. сам сервер об ошибки несообщает но результат будет неверен.

Vlad Drakula
прошу прощения, но вряд ли я извлеку от этой хелпы какую нитьбудь помощь. я пользуюсь некоторыми сайтами и учебниками.. однако я непредставляю по какому параметру искать эту функцию...
по слову функции?
по разделу?
математика?

xamelion
у тебя получится! я это знаю!

xamelion
12-09-2005, 19:50
long2ip
(PHP 4)

long2ip - конвертирует (IPv4) Internet сетевой адрес в строку стандартного Internet-формата с точкой.

Описание
string long2ip (int proper_address)

Функция long2ip() генерирует Internet-адрес в формате с точкой (т.е.: aaa.bbb.ccc.ddd) из соответствующего представления адреса.

См. также ip2long().

Господа... Я поставил эту функцию и все заработало.. но почему ?

(звонок в тех помощь майкрософта:
у меня неглючит виндовс вообще, я что неправильно что то делаю?)




© OSzone.net 2001-2012