Untuk mendapatkan public IP dari server yang digunakan oleh PHP, kita harus menggunakan jasa pihak ketiga. Beberapa situs yang bisa digunakan adalah http://ip.jaranguda.com bisa juga menggunakan https://ip.jaranguda.com. Diluar itu ada banyak api.ipify.org, icanhazip.com dan lain sebagainya

Contoh script menampilkan IP publik

<?php
// ip-public.php
$situsInfoIP = file_get_contents("https://ip.jaranguda.com");
echo $situsInfoIP;

contoh eksekusi script diatas

> php /tutorial/ip-public.php 
139.10.22.1

Bergantung pada satu situs, sangat tidak disarankan, kita rubah script diatas agar lebih tahan banting

<?php
// ip-public.php
$situsInfoIP = file_get_contents("https://ip.jaranguda.com");
 
// pastikan IP yang di dapat adalah IP publik, bukan private IP atau lainnya
// bila anda membutuhkan selain IPv4 modifikasi FILTER_FLAG_xxx
if (! filter_var($situsInfoIP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
        $situsInfoIP = file_get_contents("http://icanhazip.com");
}
 
echo $situsInfoIP;

Jika anda menjalankan script diatas, dan situs pertama ip.jaranguda.com down ataupun tidak bisa diakses, maka hasilnya jadi berantakan, seperti contoh dibawah ini

PHP Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /tmp/ip-public.php on line 3
PHP Warning: file_get_contents(https://ip.jaranguda.com): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /tmp/ip-public.php on line 3
139.10.22.1

IP memang tetap didapat, tidak seperti rencana awal mendapatkan string yang bisa diolah langsung. Solusinya adalah dengan bantuan symbol at @, @ di PHP dikenal sebagai Error Control Operators

, dalam bahasa sederhana semua error yang muncul akan diabaikan oleh PHP.

<?php
// ip-public.php
$situsInfoIP = @file_get_contents("https://ip.jaranguda.com");
 
// pastikan IP yang di dapat adalah IP publik, bukan private IP atau lainnya
// bila anda membutuhkan selain IPv4 modifikasi FILTER_FLAG_xxx
if (! filter_var($situsInfoIP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
        $situsInfoIP = @file_get_contents("http://icanhazip.com");
}
 
echo $situsInfoIP;

Leave a comment

Your email address will not be published. Required fields are marked *