2017-04-08 15 views
1

私はIPv4アドレスを持っています。 Ex。 172.19.20.21PHPを使用してIPv4/IPv6アドレスがアップしているか確認してください

は、私はそれは完全に正常に動作します。この

$fs = @fsockopen($ip,$port,$errno,$errstr,3); 
if(!$fs){ 
    $error = 'SSC is down'; 
    return Redirect::to('/')->with('error', $error) 
    ->withInput(Request::except('password')); 
} 

を行うために使用しました。

ここでは、IPv6アドレス例があります。 3000::1

if ((strpos($ip, ":") > -1)){ 

    // Code for IPv6 check 
    $fs = @fsockopen($ip,$port,$errno,$errstr,3); 
    if(!$fs){ 
     $error = 'SSC is down'; 
     return Redirect::to('/')->with('error', $error) 
     ->withInput(Request::except('password')); 
    } 

}else{ 

    // Code for IPv4 check 
    $fs = @fsockopen($ip,$port,$errno,$errstr,3); 
    if(!$fs){ 
     $error = 'SSC is down'; 
     return Redirect::to('/')->with('error', $error) 
     ->withInput(Request::except('password')); 
    } 
} 

私は上記のコードを使用することはできますか?それとも、私はIPv6のための他の解決策を探す必要がありますか?

+0

これは、 '$ ip_address'で取得したものがIPであることを100%確信している場合にのみ、v4とv6を区別します。それがあなたと大丈夫なら、これはうまくいくはずです。 – apokryfos

+2

あなたの 'if'ブロックと' else'ブロックは同一なので、基本的には「私のコードを変更しなければ、IPv6でも使えるの?私の反応は「あなたはそれを試しましたか? – IMSoP

答えて

1

IPアドレスを解析する組み込みの方法はinet_pton()です:

この関数は、人間が読める形式のIPv4またはIPv6アドレスを変換する(PHP が有効になってIPv6サポート付きで構築された場合)アドレスファミリに 適切な32ビットまたは128bitバイナリ構造。あなたができるフォーマットを決定するために

は、例えば、結果として得られたバイトカウント:あなたがこれを必要とする理由

strlen(inet_pton($ip)) 
4 bytes = 32 bits = IPv4 
16 bytes = 128 bits = IPv6 

を(あなたの正確なユースケースでは、しかし、それは一種の不明です

関連する問題