クライアントのIPへのアクセス上のPHP方法

<?PHP 

/ * * 
 *获取IP地址的方法
 * / 

// 1:
関数getip(){
   静的 $ IP = '' ;
  $ IP = $ _SERVER [ 'REMOTE_ADDR' ]; 

  もしISSET$ _SERVER [ 'HTTP_CDN_SRC_IP' ])){
     $ IP = $ _SERVER [ 'HTTP_CDN_SRC_IP' ]。

  } ELSEIFISSET$ _SERVER [ 'HTTP_CLIENT_IP'])&& するpreg_match( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/'、$ _SERVER [ 'HTTP_CLIENT_IP'])){
     $ IP = $ _SERVER [ 'HTTP_CLIENT_IP' ]。

  } ELSEIFISSET$ _SERVER [ 'HTTP_X_FORWARDED_FOR'])AND preg_match_all( '#\ D {1,3} \ \ D {1,3} \ \ D {1,3} \ \ D {1、 3} #S'、$ _SERVER [ 'HTTP_X_FORWARDED_FOR']、$マッチ)){
     foreachの$マッチ [0] AS  の$ XIP ){
       場合(!するpreg_match( 'は#^(10 | 172 \ 0.16 | 192 \。 。168)\#」、$ XIP )){
         $ IP = $ XIP 休憩; 
      }
    }

  } 
  を返す $ IPを
} 

エコー getip() '<時間>' ; 


// 2:
するerror_reportingE_ERROR | E_WARNING | E_PARSE )。

もし$ HTTP_SERVER_VARS [ "HTTP_X_FORWARDED_FOR" ]){ 

    $ IP = $ HTTP_SERVER_VARS [ "HTTP_X_FORWARDED_FOR" ]。

} ELSEIF$ HTTP_SERVER_VARS [ "HTTP_CLIENT_IP" ]){ 

    $ IP = $ HTTP_SERVER_VARS [ "HTTP_CLIENT_IP" ]。

} elseifを$ HTTP_SERVER_VARS [ "REMOTE_ADDR" ]){ 

    $ IP = $ HTTP_SERVER_VARS [ "REMOTE_ADDR" ]。

} ELSEIFのgetenv( "HTTP_X_FORWARDED_FOR" )){ 

    $ IP = のgetenv( "HTTP_X_FORWARDED_FOR" )。

} ELSEIFのgetenv( "HTTP_CLIENT_IP" )){ 

    $ IP = のgetenv( "HTTP_CLIENT_IP" )。

} ELSEIFのgetenv( "REMOTE_ADDR" )){ 

    $ IP = のgetenv( "REMOTE_ADDR" )。


    $ IP = "不明" 
} 

エコー $ IP '<時間>'。; 


// 3:
$ IP = $ _SERVER [ 'REMOTE_ADDR' ]; 

エコー $ IP。 '<時間>' ; 


// 4:
$ user_ipは =($ _SERVER [ "HTTP_VIA"])?$ _SERVER [ "HTTP_X_FORWARDED_FOR"]:$ _SERVER [ "REMOTE_ADDR" ]; 

$ user_ipは =($ user_ipは)?$ user_ipは$ _SERVER [ "REMOTE_ADDR" ]; 

エコー $ user_ipは。 '<時間>' ; 


// 5:
get_real_ip(){ 

    $ IP = ;
    もし(!$ _SERVER [ "HTTP_CLIENT_IP" ])){ 

        $ IP = $ _SERVER [ "HTTP_CLIENT_IP" ]; 
    } 

    もし(!$ _SERVER [ 'HTTP_X_FORWARDED_FOR' ])){ 

        $ IPS = 爆発( "" $ _SERVER [ 'HTTP_X_FORWARDED_FOR' ])。

        もし$ IP ){ 

            するarray_unshift$ IPS$ IP)。$ IP = FALSE ;
        } 

        のために$ I = 0; $ I < $ IPS); $ I ++ ){ 

            もし!(eregi( "^(10 | 172 \ 0.16 | 192 \ 0.168)\"、$ IPS [ $ I ])){ 

                $ IP = $ IPS [ $ I ]。
                休憩; 
            } 

        } 

    } 

    リターン$ IP$ IP$ _SERVER [ 'REMOTE_ADDR' ]); 
} 

エコー get_real_ip() '<時間>'; 


//6:
もしのgetenv( 'HTTP_CLIENT_IP' )){ 

    $ onlineip = のgetenv( 'HTTP_CLIENT_IP' )。
    
} ELSEIFのgetenv( 'HTTP_X_FORWARDED_FOR' )){ 

    $ onlineip = のgetenv( 'HTTP_X_FORWARDED_FOR' )。

} ELSEIFのgetenv( 'REMOTE_ADDR' )){ 

    $ onlineip = のgetenv( 'REMOTE_ADDR' )。

} { 

    $ onlineip = $ HTTP_SERVER_VARS [ 'REMOTE_ADDR' ]。
} 

エコー $ onlineip。 '<時間>' ;
 ?>

訪問者がプロキシまたはその他の状況を使用している場合は、IPは、実際のクライアントIPではないかもしれない達成しました

おすすめ

転載: www.cnblogs.com/leaf-blog/p/11872249.html