이전 서버에서는 아파치모듈로된 GEOIP를 사용했었다.
이경우는 $_SERVER['GEOIP_COUNTRY_CODE'] 처럼 바로 변수로 나오기는 하지만 설치가 머시기 한데다가
결정적인 것은 새로 서버를 설치하면서 Apache를 mod_mpm_event로 설정했더니
apache_get_modules()가 먹통이 되었다.
하는 수 없이 노선변경
이번에는 php pecl 모듈로된 GEOIP를 설치했다.
사용법은 약간 다르지만 dnf로 간단히 설치된다.
https://www.php.net/manual/en/geoip.installation.php
위의 링크에 7.4를 기준으로 설명되어있다.
php 버전에 따라서 약간씩 바꿔야한다.
나는 8.0이고 이미 remi 설정은 생략하고 바로...
sudo dnf search geoip
해보면 php 버전에 따라 종류별로 나온다.
...
php74-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places
php80-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places
php81-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places
php82-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places
....
이중 8.0을 골라서... 설치...
sudo dnf install php80-php-pecl-geoip
sudo cp /etc/opt/remi/php80/php.d/40-geoip.ini /etc/php.d/
sudo vi /etc/php.d/40-geoip.ini
수정
; extension=geoip.so
extension = /opt/remi/php80/root/usr/lib64/php/modules/geoip.so
sudo systemctl restart php-fpm
sudo systemctl restart httpd
php -m 해서 geoip 모듈을 확인해보거나
phpinfo에서 geoip 섹션이 나타나면 성공!!!
https://www.php.net/manual/en/book.geoip.php 에 보면 여러가지 함수가 있으나 쓰는 것은 한가지 밖에 없다.
if (extension_loaded('geoip')) $isKoreanIP = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
var_dump($isKoreanIP);
결과는
string(2) "KR"