[Laravel] IP 가져오기
IP획득 하기
일반적인 IP 획득
- 문서상에서는 아래와 같이 설명하고 있다.
- 1-1
class UserController extends Controller
{
public function index(Request $request)
{
$clientIP = $request->ip();
}
}
- 1-2
$clientIP = \Request::ip();
- 1-3
$clientIP = \Request::getClientIp(true);
- 하지만 실제로 하면 잘 안될 경우가 많습니다.
- 아래는 제가 사용하는 소스입니다.
private function storeToLog($user) {
$http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER']:"";
$http_origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN']:"";
$http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT']:"";
$remote_addr = $this->getRealIpAddr();
}
/**
* 아래 부분이 실제 사용자 IP를 가져오는 부분입니다.
*/
private function getRealIpAddr(){
if(!empty($_SERVER['HTTP_CLIENT_IP']) && getenv('HTTP_CLIENT_IP')){
return $_SERVER['HTTP_CLIENT_IP'];
}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && getenv('HTTP_X_FORWARDED_FOR')){
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}else if(!empty($_SERVER['REMOTE_HOST']) && getenv('REMOTE_HOST')){
return $_SERVER['REMOTE_HOST'];
}else if(!empty($_SERVER['REMOTE_ADDR']) && getenv('REMOTE_ADDR')){
return $_SERVER['REMOTE_ADDR'];
}
return false;
}
혹은 아래와 같은 것도 있다.
private function getIp(){
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
if (array_key_exists($key, $_SERVER) === true){
foreach (explode(',', $_SERVER[$key]) as $ip){
$ip = trim($ip); // just to be safe
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
return $ip;
}
}
}
}
return request()->ip(); // it will return the server IP if the client IP is not found using this method.
}