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(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;