Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Mendapatkan Alamat IP Pengguna dengan Tepat dalam PHP?

Bagaimanakah Saya Boleh Mendapatkan Alamat IP Pengguna dengan Tepat dalam PHP?

Patricia Arquette
Lepaskan: 2024-12-24 07:25:13
asal
620 orang telah melayarinya

How Can I Accurately Get a User's IP Address in PHP?

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;
                }
            }
        }
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan