PHP — Как использовать переменные файла конфигурации в массиве функции?

#php #arrays #foreach #while-loop

Вопрос:

Я не смог найти примера того, чего я пытаюсь достичь. Наверное, я не знаю правильных поисковых слов для использования. У меня есть рабочий сценарий, но я хочу сделать его более гибким, добавив основной файл конфигурации, редактируемый администратором.

У меня есть следующая функция:

     function ip_is_mobile($ip) {
        $pri_addrs = array(                 
            '66.87.0.0-66.87.255.255',  // Sprint mobile
            '174.192.0.0-174.255.255.255'   // Verizon mobile
        );
    
        $long_ip = ip2long($ip);
    
        if($long_ip != -1) {

            foreach($pri_addrs AS $pri_addr) {
                list($start, $end) = explode('-', $pri_addr);

                // IF IS a mobile IP
                if($long_ip >= ip2long($start) amp;amp; $long_ip <= ip2long($end))
                    return true;
            }
        }
        return false;
    }
 

Я хотел бы заменить жестко закодированные диапазоны IP-адресов в функции переменными или определениями, которые будут установлены в главном файле конфигурации, чтобы файл конфигурации имел что-то похожее на следующее:

 // Mobile IP address ranges. Add as many as needed.
$MobileIPs['0']="66.87.0.0-66.87.255.255";
$MobileIPs['1']="174.192.0.0-174.255.255.255";
$MobileIPs['2']="85.110.50.0/24";
 

Моя цель состоит в том, чтобы дать администратору простой для чтения и понимания способ добавления необходимого количества диапазонов IP-адресов (возможно, максимум 20). Я не против того, чтобы полностью переписать функцию, если есть лучший, более эффективный способ. В дополнение к диапазонам IP-адресов было бы выгодно, если бы можно было также указать CIDR, как указано в последней строке кода выше.

Какие изменения мне нужно внести в функцию и какими будут соответствующие строки в главном файле конфигурации, чтобы пользователь мог добавить любое количество диапазонов или CIDR?

Комментарии:

1. Я имею в виду, что вам нужна какая-то база данных для диапазонов IP-адресов магазинов. Администратор сможет добавлять/удалять/изменять диапазоны по БД, а скрипт будет считывать данные из БД и выполнять свою работу

2. Слава, диапазонов IP-адресов будет недостаточно, чтобы оправдать использование для них базы данных. Вот почему я хочу, чтобы они были указаны в файле конфигурации. Эти диапазоны будут использоваться для анализа базы данных отдельных IP-адресов, которые уже были зарегистрированы. Имеет смысл или я не понял ваш комментарий 🙂

Ответ №1:

Вы можете хранить конфигурацию диапазонов IP-адресов в отдельном файле конфигурации и использовать require_once в своем основном коде

ip_ranges.conf.php (файл конфигурации)

 <?php

    $pri_addrs = array(                 
        '66.87.0.0-66.87.255.255',    // Sprint mobile
        '174.192.0.0-174.255.255.255' // Verizon mobile
    );
 

index.php (файл основного кода)

 function ip_is_mobile($ip) {
    require_once(ip_ranges.conf.php); // include config file

    $long_ip = ip2long($ip);

    if($long_ip != -1) {
        foreach($pri_addrs AS $pri_addr) {
            list($start, $end) = explode('-', $pri_addr);
                 
             // IF IS a mobile IP
             if($long_ip >= ip2long($start) amp;amp; $long_ip <= ip2long($end))
            return true;
        }
    }
    return false;
}
 

Комментарии:

1. Слава, спасибо за твой пример, но я ищу способ использовать простые однострочные диапазоны или циклы в главном файле конфигурации, как я указал в своей статье. Я не доверяю пользователю, чтобы он не пропускал запятые (т. Е. «66.87.0.0-66.87.255.255»,). Должен быть способ сделать то, что я хочу, с помощью foreach… Я просто не могу этого понять.