Nano Hash - криптовалюты, майнинг, программирование

Сохранение IP как беззнакового int?

Я читал, что лучший способ хранить IP-адреса в базе данных - создать поле Unsigned Int (10). Как преобразовать IP-адреса с помощью PHP? Я пробовал использовать

$this->ip = long2ip($_SERVER['REMOTE_ADDR']);

Но, похоже, это не работает. Я нашел способ преобразовать его обратно в IP-адрес, используя

$this->ip = sprintf("%u", ip2long($result['ip']));

Как мне изначально преобразовать IP-адрес? Следует ли мне использовать для этого PHP? Или лучше интегрировать в запрос MySQL?

30.09.2010

  • Что ж, в соответствии с этим вопросом лучший тип данных - это не Integer stackoverflow.com/questions/1038950/ 30.09.2010
  • Не уверен в лучшем типе данных по всем направлениям, но в случае с Postgres я определенно сказал бы, что лучшим типом данных был Inet, а не взламывать его во что-то еще. 02.10.2010

Ответы:


1

long2ip преобразует целое число в формат IP и _ 2_ делает обратное.

Поэтому используйте ip2long для преобразования $_SERVER['REMOTE_ADDR'] в целое число для сохранения его в базе данных и используйте long2ip после чтения целого числа из базы данных:

$long = ip2long($_SERVER['REMOTE_ADDR']);
$ip   = long2ip($long);
30.09.2010
  • Ваше объяснение правильное, но ваше использование в фрагменте неверно. 30.09.2010

  • 2

    Лучше поместите эту логику в свой SQL-запрос:

    INSERT INTO `table`
        (`ip`)
    VALUES
        INET_ATON('192.168.0.1')
    

    И затем скрытый адрес обратно при выборе данных:

    SELECT INET_NTOA(`ip`)
        FROM `table`
    
    30.09.2010
  • +1, особенно потому, что он также должен поддерживать IPv6 - хотя это, вероятно, никогда не станет реальностью: / 30.09.2010
  • В чем преимущество использования SQL перед PHP? 01.10.2010
  • Ну, просто лучше, если это возможно, включить логику, связанную с хранилищем базы данных, в запросы. Например, если вы обновите свой сервер MySQL до новой версии и в способе хранения данных произойдут некоторые изменения, эти изменения также будут отражены в функциях базы данных. Если вы доверяете эту логику другому инструменту, у вас могут возникнуть проблемы. Но в первую очередь это логическое делегирование задач, чтобы ваш код был более понятным. 01.10.2010
  • @Markus IPv6 - это реальность сегодня. Достаточно редко, чтобы мы не могли рассчитывать на него, но достаточно часто, чтобы мы не могли рассчитывать на то, что он не будет использоваться. 02.10.2010

  • 3

    Я использовал это

    function ip2int($ip) {
        $a = explode(".",$ip);
        return $a[0] * 256 * 256 * 256 + $a[1] * 256 * 256 + $a[2] * 256 + $a[3];
    }
    
    30.09.2010
  • этот лучше, чем встроенный, имо, потому что он не вызывает проблемы со знаком 23.01.2015

  • 4

    Если вы используете MySQL, вы можете использовать функции INET_ATON (эквивалент ip2long) и INET_NTOA (long2ip) вместо того, чтобы выполнять обработку с помощью PHP:

    30.09.2010

    5

    Вам нужно преобразовать версию своего IP-адреса в виде строки с точками, используя ip2long, и обратно, используя long2ip. Похоже, у вас сейчас все наоборот.

    $integer_ip = ip2long($_SERVER["REMOTE_ADDR"]); // => 1113982819
    $dotted_ip  = long2ip($integer_ip);             // => "66.102.7.99"
    
    30.09.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..