Cara Mendapatkan Kembali Alamat IP Pengguna dengan Tepat dalam PHP
Mendapatkan semula alamat IP pengguna dalam PHP boleh menjadi tugas yang mencabar kerana penggunaan proksi dan faktor lain yang boleh mengaburkan alamat IP sebenar. Walaupun terdapat pelbagai kaedah yang tersedia, masing-masing mempunyai hadnya sendiri, memahami pendekatan yang paling berkesan boleh memastikan perolehan IP yang tepat.
Satu kaedah biasa ialah menggunakan $_SERVER pembolehubah global. Ia menawarkan pelbagai pengepala yang berpotensi mengandungi maklumat IP. Antaranya, REMOTE_ADDR memegang alamat IP klien yang terakhir diketahui; walau bagaimanapun, kaedah ini tidak dianggap boleh dipercayai kerana ia boleh ditipu dengan mudah.
Untuk menangani perkara ini, pembangun PHP telah membangunkan pendekatan yang lebih komprehensif yang memanfaatkan berbilang pengepala $_SERVER. Pendekatan ini melibatkan penyemakan alamat IP internet/ISP yang dikongsi melalui HTTP_CLIENT_IP. Selain itu, ia memeriksa alamat IP yang melalui proksi melalui pengepala seperti HTTP_X_FORWARDED_FOR, HTTP_X_FORWARDED, HTTP_X_CLUSTER_CLIENT_IP, HTTP_FORWARDED_FOR dan HTTP_FORWARDED.
Anggapan bahawa salah satu pengepala ini akan memberikan alamat IP yang lebih tepat. Untuk memastikan kesahihan, fungsi validate_ip digunakan untuk menapis rangkaian peribadi dan alamat IP tidak sah.
Berikut ialah versi ringkas kod yang disediakan dalam soalan:
function get_ip_address(){ 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; } } } } }
Walaupun kaedah ini meningkatkan ketepatan dengan ketara, kaedah ini tetap terdedah kepada pengguna berniat jahat yang mungkin menyuntik pengepala permintaan mereka sendiri. Untuk aplikasi kritikal misi, bergantung semata-mata pada REMOTE_ADDR adalah disyorkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Alamat IP Pengguna dengan Tepat dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!