2016-03-29 18 views
2

私はVARBINARY(16)にIPアドレスを保存したいと思います。バイナリアドレスは文字列'01001010010100101001010010100101'です。文字列 '010101010'をPHPの実際のバイナリ文字列に変換する方法

私はそれをMySQLに挿入します。私はこれが自動的に変換されないことを認識します。

PHPマニュアルを検索した後、私はこの機能がないことに驚いています。

バイナリ文字列をVARBINARYに変換する方法についてのヘルプが必要です。

答えて

0

おかげで、あなたのすべてを長整数アドレスを変換します!しかし、私はよりよい解決策を見つけたと思う:誰かが6年前、PHPマニュアルページに掲載:

http://php.net/manual/en/function.pack.php#93085

<?php 
function bin2bstr($input) 
// Convert a binary expression (e.g., "100111") into a binary-string 
{ 
    if (!is_string($input)) return null; // Sanity check 

    // Pack into a string 
    return pack('H*', base_convert($input, 2, 16)); 
} 

function bstr2bin($input) 
// Binary representation of a binary-string 
{ 
    if (!is_string($input)) return null; // Sanity check 

    // Unpack as a hexadecimal string 
    $value = unpack('H*', $input); 

    // Output binary representation 
    return base_convert($value[1], 16, 2); 
} 

// Returns string(3) "ABC" 
var_dump(bin2bstr('01000001 01000010 01000011')); 

// Returns string(24) "010000010100001001000011" 
var_dump(bstr2bin('ABC')); 
?> 
+0

すみません。コンテンツは元のURLからコピーされます。 – Walkinraven

-1

これは、機能inet_ntoaconvを組み合わせて実行できます。

mysql> select inet_ntoa(conv('01001010010100101001010010100101',2,10)); 
+----------------------------------------------------------+ 
| inet_ntoa(conv('01001010010100101001010010100101',2,10)) | 
+----------------------------------------------------------+ 
| 74.82.148.165           | 
+----------------------------------------------------------+ 
1 row in set (0.00 sec) 

よりオーバー、文字列の結果はBINARYに変換することができます。

mysql> select CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY); 
+--------------------------------------------------------------------------+ 
| CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY) | 
+--------------------------------------------------------------------------+ 
| 74.82.148.165               | 
+--------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

また、このBINARY文字列を簡単にUPDATEまたはINSERTを使用してVARBINARY(16)列に入れることができます。

+0

は、IPアドレスのバイナリ表現の結果ですか?結果はvarbinary値ですか? – Pred

0

PHPでは、IPv4アドレスにバイナリ文字列を変換するbindeclong2ipを使用することができます。

bindecは - binary_stringの引数で表される進数を10進数を返します。

long2ipは - (IPv4)のインターネット標準点在形式の文字列に

$ip_as_int = bindec('01001010010100101001010010100101'); 
$ipv4 = long2ip ($ip_as_int); 
echo $ipv4; 

74.82.148.165 
関連する問題