глюк с crc32

sergey24

Новичок
глюк с crc32

делаю статистику,
в базу очень часто скидывается инфа
и crc32 часто выдает одну и туже контрольную сумму.

при проверке по отдельности - суммы разные.

вот пример
$a='INSERT INTO statlog (reffer,crcreffer, reffer_host, crc_reffer_host ) VALUES
('.$reffe.'",'.crc32($reffe).',"'.$host_ref.'",'.crc32($host_ref).') ';

выдает
ipag.com.ua 2147483647
arpersonal.ru 2147483647
nova.rambler.ru 2147483647
и т.д.

я думаю что не успевает сбрасывать кеш, но фиг знает
 

waldicom

Новичок
это по моему максимальный integer...
А тут стоит, что надо использовать, чтобы получить в читаемом виде: http://de.php.net/manual/en/function.crc32.php
И почему не использовать md5()?
 

sergey24

Новичок
по моему глюк из за 64 бита, проблема решена

// This function returns the same int value on a 64 bit mc. like the crc32() function on a 32 bit mc.

function crcKw($num){
$crc = crc32($num);
if($crc & 0x80000000){
$crc ^= 0xffffffff;
$crc += 1;
$crc = -$crc;
}
return $crc;
}

-~{}~ 05.03.09 03:14:

на счет длины ты похоже был прав
 

vovanium

Новичок
sergey24
Проблема не в 64 битах, а в том что в PHP целые числа знаковые, а у тебя в базе беззнаковый тип, в доках написано как быть
PHP:
sprintf("%u", crc32($num));
А вообще в MySQL начиная с 4.1 есть встроенная функция CRC32
 
Сверху