1

訪問者の IP を取得し、explode でドットを削除し、ドットなしで IP をデータベースに保存し、それを取得してエコーするスクリプトを作成しています。しかし、IP をデータベースに保存すると、IP がめちゃくちゃになってしまいます。

これがコードです!

例: 私の IP は178.175.35.205、ドットなし:17817535205ですが、MYSQL を通過すると、PhpMyAdmin でも表示され、 に変換され2147483647ます。

更新:すべてがうまくいったことが判明しましたが、私は.をINT除いて使用していましたBIGINT. それはそれを修正しました。現在、ip2long と long2ip を使用しています。

4

3 に答える 3

6

強い提案:

1) IP を文字列として保存する

利点:

2) 「.」で退出できます。

... と ...

3) IPv4 および/または IPv6 アドレスのいずれかに対応できます。

私見では..

于 2012-12-11T19:15:04.703 に答える
4

車輪の再発明をしない

http://php.net/manual/en/function.ip2long.phpおよび関数を使用http://php.net/manual/en/function.long2ip.php して変換を行います。

それはまたあなたのためにそれを検証します

$ipToStore =  ip2long($ip);
if (false !== $ipToStore) {
    // Store your ip
}

// Read DB
echo long2ip($ipFromDB);

BIGINTそれを保存するために使用するデータベースに確認してください。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

于 2012-12-11T19:12:29.957 に答える
0

ここでの問題は、使用している整数表現がINTMySQL の列に格納できるものよりも大きいことです。PHP では、ip2long関数を使用して IP アドレスを適切な 32 ビット整数に変換できます。

于 2012-12-11T19:15:12.730 に答える