PHP Бан по IP/Аккаунту

Рейтинг: 0Ответов: 1Опубликовано: 02.07.2011

Мне нужно организовать бан по IP посредством PHP. Прогулявшись по форумам я нашел примеры, они реализованы одним из двух способов:

  1. Через массив(хранить IP в массиве)
  2. Файловый (хранить IP в текстовом файле)

Я хочу реализовать бан по IP, а так же бан по аккаунту.

Собираюсь реализовать через бд MySQL. Хотел бы узнать какие недостатки мною выбранного метода.
И как мне лучше реализовать. Может бан по IP на файлах, а бан по аккаунту в бд.

Прошу совета тех, у кого есть опыт!

Ответы

▲ 4Принят

На уровне обращения к черному списку, система банов предполагает, что читаться этот самый список будет намного чаще, чем туда будет что-то записываться. СУБД используют самые эффективные алгоритмы для поиска информации в индексированных списках. Это особенно важно, если черный список будет очень большим.

Плюс, предполагаю что движок вашей системы работает с MySQL, аккаунты хранятся так-же, в базе. С БД работа уже налажена, и логичнее всего туда-же прикручивать остальную функциональность.

Если черный список будет не очень большим, то можно воспользоваться и файлами. Но, желательно, хранить его в виде сериализованного массива (функция serialize()), обрабатываться будет быстрее. Плюс, с файлами вы работаете напрямую, а с базой через СУБД.

Как-то так...

UPD: Для работы с IP в MySQL есть удобные функции INET_NTOA() и INET_ATON(). Они преобразовывают строку с IP в число, и обратно. Список чисел обрабатывается быстрее чем список строк.