希望根據不同的ip位址區段,網站顯示不同的內容。目前針對ipv4的位址區段做了限制,但是有些用戶端訪問是通過ipv6的地址訪問,做的限制就沒有用了。所以我想問一下,有沒有可能通過php只擷取ipv4的代碼。
目前使用的php擷取ip的代碼如下:
function check_ip($str) { return preg_match('/""A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))"".){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))""Z/',$str)>0; } function getIP($isHeader=false) { if($isHeader) { if (isset($_SERVER['HTTP_CLIENT_IP']) && check_ip($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && check_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } } if (isset($_SERVER['REMOTE_ADDR']) && check_ip($_SERVER['REMOTE_ADDR'])) { return $_SERVER['REMOTE_ADDR']; } else { return 'unknown'; } }
回複內容:
希望根據不同的ip位址區段,網站顯示不同的內容。目前針對ipv4的位址區段做了限制,但是有些用戶端訪問是通過ipv6的地址訪問,做的限制就沒有用了。所以我想問一下,有沒有可能通過php只擷取ipv4的代碼。
目前使用的php擷取ip的代碼如下:
function check_ip($str) { return preg_match('/""A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))"".){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))""Z/',$str)>0; } function getIP($isHeader=false) { if($isHeader) { if (isset($_SERVER['HTTP_CLIENT_IP']) && check_ip($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && check_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } } if (isset($_SERVER['REMOTE_ADDR']) && check_ip($_SERVER['REMOTE_ADDR'])) { return $_SERVER['REMOTE_ADDR']; } else { return 'unknown'; } }