#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… Я просто не могу этого понять.