А знаете, почему я еще на работе?
Есть некий сайт (Linux, Apache, MySQL, PHP, извините), в базу которого, среди прочего, пишутся ip-адреса. Внезапно понадобилось посмотреть один из адресов и внезапно обнаружилось, что вместо адресов в базе какая-то удивительная поебень — вот, скажем, 127.255.255.255 вместо ожидаемого белого IP.
Выяснил, что IP пишется в базу MySQL, каковой MySQL ожидает получить INT(11). Да, получает свой INT(11). Оочень странного содержания.
Полез, отплевываясь от омерзения, в шевелящийся от багов говнокод, написанный косоруким похапешником на аутсорсе. Выяснил, что адрес конвертируется похапенью при помощи специальной хуйни™ ip2long().
Выяснил, что специальная хуйня™ ip2long() ведет себя совершенно по-разному в 32- и 64-битных системах. И что, думаете, автор этого поделия предполагал, что оно будет запускаться в x64? Нет, разумеется, с чего бы.
И вот так у них всё.
PHP очень ок, дада.
%#$*&^@^&*$, дада.
1) А почему INT(11)? Из 32 бит никак больше 10 десятичных знаков не получается..
2) Аффтар по ссылке несёт какую-то хуйню. Во-первых, IP-адреса для ip2long должны быть в кавычках, ибо строки. Во-вторых, знаковое целое, состоящее из всех единиц (255.255.255.255) — это ни разу не -2147483648, а вовсе даже -1. А беззнаковое — 4294967295, а не 4294967296. Оно тупо не может быть чётным, потому что заканчивается двоичной единицей.
А 127.127.127.127 aka 7F7F7F7F — это 2139062143, а не 2147483648.
3) специальная хуйня действительно ведёт себя по-разному, но я так понимаю, вопрос не в ней самой, а в обратном преобразовании из целого числа в IP. И если использовать другую специальную хуйню — long2ip(), то она нормально преобразует эти числа в исходные IP-адреса.
Более того, и 32-, и 64-битовая версии нормально преобразуют и -1, и 4294967295 в 255.255.255.255.
а почему не функцией mysql это сделано, интересно?
ну и про unsigned int забывать не надо для таких случаев.
Этот вопрос сводится к «Почему похапешники на аутсорсе такие косорукие?». )
или «почему при приеме результата не производится code review и тестирования»
то есть нанять ещё одного косорукого аутсорсера, и потом пытаться понять кто из них более косорук? клёвая идея.
(вот черт, открыл походный ноут и обнаружил неотправленный комментарий)
а ничо, что code review и тестирование нужно проводить независимо от того, в штате программисты или на аутсорсе?
кому нужно? тестирование было, а вот code review я за 15 лет ни разу не видел.
кому нужно? тестирование было, а вот code review я за 15 лет ни разу не видел.
(вот черт, открыл походный ноут и обнаружил неотправленный комментарий)
а ничо, что code review и тестирование нужно проводить независимо от того, в штате программисты или на аутсорсе?
то есть нанять ещё одного косорукого аутсорсера, и потом пытаться понять кто из них более косорук? клёвая идея.
или «почему при приеме результата не производится code review и тестирования»
Фраза «на аутсорсе» в этом вопросе лишняя ;)
Фраза «на аутсорсе» в этом вопросе лишняя ;)
Этот вопрос сводится к «Почему похапешники на аутсорсе такие косорукие?». )