ホームページ バックエンド開発 PHPの問題 PHPでIPを整数に変換する方法

PHPでIPを整数に変換する方法

Nov 01, 2021 am 09:56 AM
ip php

php で IP を整数に変換するメソッド: 1. PHP サンプル ファイルを作成します; 2. "ip2long($ip);" メソッドを通じて IP アドレスを整数に変換します。

PHPでIPを整数に変換する方法

この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター

IP を に変換する方法PHPの整数?

#PHP における IP アドレスと整数の相互変換の詳細説明

この記事では主に IP アドレスと整数の相互変換の詳細な説明を紹介します。 PHP の整数。この記事では、PHP 関数 ip2long と long2ip の使用法とそのバグの紹介を紹介し、最後に私が書いた 2 つのアルゴリズムを紹介します。必要な友人は参照してください。

IP を次のように変換する整数ストレージはデータベースの最適化方法です 一般的な傾向として、IP を格納するときに、多くの人が依然として文字列型ストレージを使用しています。文字列インデックスは、特にテーブル内のデータ量が多い場合や、整数インデックスよりも多くのリソースを消費します。今日、特定の IP セグメントのデータをクエリします。ここで言及されている ip は ip4 を指します。ip6 はこの記事の範囲内ではありません。

システム関数 ip2long および long2ip
PHP には、IP アドレスを整数に変換できる組み込み関数 ip2long があります。

コードは次のとおりです:

$ip = '210.110.11.49';echo ip2long($ip);
ログイン後にコピー
出力:

-764540111
ログイン後にコピー
得られる結果は符号付き整数型であるため、出力整数型には負の符号が付きます。符号付き整数型の値は 2147483647 です。結果を符号なし型に変換するには、次のように記述できます。

3530427185
ログイン後にコピー

long2ip を使用して整数型を IP アドレスに変換し直します

$ip = '210.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);
ログイン後にコピー
出力:

210.110.011.49
-764540623
210.110.9.49
ログイン後にコピー
変換結果が一致しません。IP の最初の番号の前に先頭の 0 を追加して、

$ip = '021.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);
ログイン後にコピー
の出力を確認します。

021.110.11.49
292424497
17.110.11.49
ログイン後にコピー
変換結果はすべて間違っています。上記の例はすべて先頭に 0 を追加することによって発生し、変換結果にエラーが発生し、反転結果は変換された元の IP と一致しません。

変換原理

現在 2 つのアルゴリズムがあります:


まず、最初のセクションは 256 の 3 乗で乗算され、2 番目のセクションは次のようになります。 256 の 2 乗を乗算し、3 番目のセグメントに 256 を乗算し、最終的な合計は

$ip = '0210.110.11.49'; 
function ipToInt($ip){    $iparr = explode('.',$ip);    $num = 0;    for($i=0;$i<count($iparr);$i++){        $num += intval($iparr[$i]) * pow(256,count($iparr)-($i+1));
    }    return $num;
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);
ログイン後にコピー
出力:

0210.110.11.49
3530427185
210.110.11.49
ログイン後にコピー

2 番目、ビットごとの演算子を使用して

$ip = '0210.110.11.49'; 
function ipToInt($ip){    $iparr = explode('.',$ip);    return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);
ログイン後にコピー
出力:

0210.110.11.49
-764540111
210.110.11.49
ログイン後にコピー

IP が合法かどうかを確認します

まず、自分でテストを実行します

function check_ip($ip){    $iparr = explode('.',$ip);    foreach($iparr as $v){ if($v>255) return false; }    return true;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));
[code]

输出:
[code]210.285.11.49,bool(false)210.205.11.49,bool(true)
ログイン後にコピー

いいえ。 2. ip2long を使用して

function check_ip($ip){    if(ip2long($ip)) return true;    return false;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));
ログイン後にコピー
出力:

210.285.11.49,bool(false)210.205.11.49,bool(true)
ログイン後にコピー

追記

多くの人が使用します。 ip2long を使用して IP 書き込みライブラリを変換して int 型フィールドを格納しますが、システム プラットフォームが異なると、ip2long 関数で取得される値が異なるため、long2ip で取得した IP が読み取り時に元の IP と一致しない可能性があります。データベースからデータを取得して IP を反転します。

MySQL の場合は、mysql システム関数 INET_ATON および INET_NTOA を使用するか、bigint 型を使用するか、関数を自分で作成することで解決できます。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPでIPを整数に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles