私たちは手に入れます ​"/> 私たちは手に入れます ​">

ホームページ  >  記事  >  バックエンド開発  >  PHP: IP 変換シェーピング (変換)

PHP: IP 変換シェーピング (変換)

WBOY
WBOYオリジナル
2016-06-13 12:34:561057ブラウズ

PHP: IP 変換シェーピング (変換)

この記事は http://blog.chinaunix.net/uid-10697776-id-2935481.html から転載されました

?

?

?

ドットで区切られた 4 つのフィールドを持つ IP ネットワーク アドレス プロトコル アドレスを整数に変換するにはどうすればよいですか?たとえば、PHP には ip2long という関数があります。

echoip2long("10.2.1.3");<p>?></p>echoip2long("10.2.1.3");<br>?>

を入手します

167903491

これはどのように計算されますか? 現在、2 つのアルゴリズムがわかっています。 1 つの

functionip2int($ip){<p> //まず IP を 4 つのセグメント $ip1,$ip2,$ip3,$ip4<code>functionip2int($ip){<br> //我们先把ip分为四段,$ip1,$ip2,$ip3,$ip4<br> list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);<br> //然后第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256<br> //这即是我们得到的值<br> return$ip1*pow(256,3) $ip2*pow(256,2) $ip3*256 $ip4;<br>}<br>?>list($ip1,$ip2,$ip3) に分割します,$ip4)=explode(".",$ip);

//最初のセグメントに 256 の 3 乗を掛け、2 番目のセグメントに 256 の 2 乗を掛け、3 番目のセグメントに 256 を掛けます

/ /これは取得する値

return$ip1*pow(256,3) $ip2*pow(256,2) $ip3*256 $ip4;

}functionip2int($ip){<br> list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);<br> return($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4);<br>}<br>?>?>

2 番目に、ビット演算を使用します

functionip2int($ip){

list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);

return($ip1<< 24)|($ip2<16)|($ip3<8)|($ip4);

}

?>functionchk_ip($ip){<br> if(ip2long($ip)=="-1"){<br>   returnfalse;<br> }<br> returntrue;<br>}<br>//应用<br>var_export(chk_ip("10.111.149.42"));<br>var_export(chk_ip("10.111.256.42"));<br>?> </p> 整数に変換すると、一部の IP が負になることがわかります。これは、結果が符号付き整数であり、最大値が 2147483647 であるためです。符号なしに変換するには、<p> を使用できます。 </p> sprintf("%u",ip2long($ip);<p> </p> は正の整数に変換できます。そして、得られた結果は、通常、long2ip を使用して元の IP アドレスに変換できます。 ip2long を使用して、<p> などの IP が有効かどうかを確認することもできます。 </p> <code>functionchk_ip($ip){<p>if(ip2long($ip)=="-1"){</p> returnfalse;<p>}</p>returntrue;<p>}</p>//アプリケーションvar_export(chk_ip("10.111.149.42"));<div class="clear">var_export(chk_ip("10.111.256.42"));?> true と false を出力します ? ? ? ? ? </div>

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