php 7 버전에서 maxminddb를 사용할 일이 있어서 설치하고 사용하는 방법을 알아보자
설치 방법은 yum을 이용하는 방법과 pecl 이용 또는 직접 comfile 하는 방법이 있는데 간략하게 설명
1. yum을 시용하는 방법 / 보통 remi repo를 사용하는데 자기에 맞는 php버전의 maxminddb가 있으면 설치 후 php 재시작
1 |
yum -y install php74-php-maxminddb |
2. yum은 서버마다 다 다르니 pecl를 이용하는 방법으로 설치하는 방법 안내
우선 php 경로가 가서 pecl로 설치 진행
1 2 3 4 5 6 7 8 9 |
[root@xinet php-7.3.33]# cd /usr/local/php-fpm/bin/ [root@xinet bin]# ./pecl install maxminddb Build process completed successfully Installing '/usr/local/php-fpm/lib/php/extensions/debug-non-zts-20180731/maxminddb.so' install ok: channel://pecl.php.net/maxminddb-1.11.1 configuration option "php_ini" is not set to php.ini location You should add "extension=maxminddb.so" to php.ini |
3. 정상적으로 설치가 진행이 되었다면 php.ini 경로에 extension_dir 경로와 모듈을 등록
1 2 3 4 |
[root@xinet bin]# vi /usr/local/php-fpm/etc/php.ini extension_dir = "/usr/local/php-fpm/lib/php/extensions/debug-non-zts-20180731/" extension=maxminddb.so |
4. 권한 변경 및 서비스 재시작
1 2 3 4 |
[root@xinet bin]# chmod 755 /usr/local/php-fpm/lib/php/extensions/debug-non-zts-20180731/maxminddb.so ### php 재시작 [root@xinet bin]# systemctl restart php-fpm.service |
5. php info에서 확인해보면 추가된것을 확인 할 수 있다
6. 그럼 이제 php에서 maxminddb를 이용해서 출력을 해보자
소스 파일은 https://github.com/maxmind/MaxMind-DB-Reader-php 해당 경로에서 autoload.php 파일은 저장
7. 해당 파일을 다운로드 후 새로운 파일을 만들고 파일 경로를 맞게 수정해준다 / /usr/share/GeoIP/GeoLite2-City.mmdb 경로
해당 파일이 없다면 https://xinet.kr/data/geoip/GeoLite2-City.mmdb 파일 다운로드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php require_once 'autoload.php'; use MaxMind\Db\Reader; $ipAddress = '168.126.63.1'; $databaseFile = '/usr/share/GeoIP/GeoLite2-City.mmdb'; try { $reader = new Reader($databaseFile); $data = $reader->get($ipAddress); $dataWithPrefixLen = $reader->getWithPrefixLen($ipAddress); $reader->close(); echo "<h2>GeoLite2 City Data for IP: $ipAddress</h2>"; echo "<h3>Basic Data:</h3>"; echo "<pre>" . json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "</pre>"; echo "<h3>Data with Prefix Length:</h3>"; echo "<pre>" . json_encode($dataWithPrefixLen, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "</pre>"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } ?> |
자세한 부분은 : https://github.com/maxmind/MaxMind-DB-Reader-php