За последние 24 часа нас посетили 18882 программиста и 1730 роботов. Сейчас ищут 1294 программиста ...

filter_input(INPUT_SERVER, 'REMOTE_ADDR'); в php8 пишет deprecated как безопасно обратиться $SERVER

Тема в разделе "PHP для новичков", создана пользователем Norair_986, 3 фев 2025.

  1. Norair_986

    Norair_986 Гость

    С нами с:
    3 фев 2025
    Сообщения:
    3
    Симпатии:
    0
    filter_input(INPUT_SERVER, 'REMOTE_ADDR'); в php8 пишет deprecated как безопасно обратиться $SERVER?
     
  2. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    92
    Симпатии:
    18
    Привет
    PHP:
    1. <?php
    2.  
    3. // 1 вариант
    4. $ip = $_SERVER['REMOTE_ADDR'] ?? '';
    5. print $ip . "\r\n";
    6.  
    7.  
    8. // 2 вариант с валидацией ip
    9. function getIP() {
    10.     $ip = $_SERVER['REMOTE_ADDR'] ?? '';
    11.  
    12.     // Валидация IPv4
    13.     if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    14.         return $ip;
    15.     }
    16.  
    17.     // Валидация IPv6
    18.     if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
    19.         return $ip;
    20.     }
    21.  
    22.     return '';
    23. }
    24.  
    25. $ip = getIP();
    26. print $ip . "\r\n";
    27.  
    28.  
    29. // 3 вариант (если учитывать прокси)
    30. function getIP2() {
    31.     $headers = [
    32.         'HTTP_CLIENT_IP',
    33.         'HTTP_X_FORWARDED_FOR',
    34.         'HTTP_X_FORWARDED',
    35.         'HTTP_X_CLUSTER_CLIENT_IP',
    36.         'HTTP_FORWARDED_FOR',
    37.         'HTTP_FORWARDED',
    38.         'REMOTE_ADDR'
    39.     ];
    40.  
    41.     foreach ($headers as $header) {
    42.         if (isset($_SERVER[$header])) {
    43.             $ip = trim($_SERVER[$header]);
    44.             // Берем первый IP если их несколько
    45.             $ips = explode(',', $ip);
    46.             $ip = trim($ips[0]);
    47.  
    48.             if (filter_var($ip, FILTER_VALIDATE_IP)) {
    49.                 return $ip;
    50.             }
    51.         }
    52.     }
    53.  
    54.     return '';
    55. }
    56.  
    57. $ip = getIP2();
    58. print $ip . "\r\n";

    на самом деле достаточно первого варианта.