#php #ip-address #php-7.4
Вопрос:
Я пытаюсь проверить, содержат ли файлы в каталоге определенный ip-адрес. Если IP-адрес не найден в имени файла, я хочу, чтобы файл с не найденным IP-адресом в имени файла был перемещен туда.
Вот мой сценарий:
<?php
function ip_range($start = "10.100.1.2", $end = "10.100.255.254"){
$start = ip2long($start);
$end = ip2long($end);
return array_map('long2ip', range($start, $end));
}
function check_filename(){
$ip_address_list = ip_range();
$dir_files = scandir("/mnt/dumps/");
foreach($ip_address_list as $ip){
foreach($dir_files as $file){
if($d = glob($ip)){
if(empty($d)){
$fpath = "/mnt/dumps/{$ip}_public.txt";
echo $fpath;
}
}
if(isset($fpath)){
return $fpath;
}
if(isset($fpath)){
return $fpath;
}
}
};
?>
Но когда я выполняю скрипт, он возвращает меня как пример 10.100.1.2 — но файл, содержащий этот IP-адрес, уже существует. На самом деле это не то, чего я хочу.
Не могли бы вы сказать мне, что я сделал не так? Спасибо!
Редактировать:
Я изменил сценарий:
function ip_range($start = "10.100.1.2", $end = "10.100.255.254"){
$start = ip2long($start);
$end = ip2long($end);
return array_map('long2ip', range($start, $end));
}
function check_filename(){
$ip_address_list = ip_range();
$dir_files = scandir("/mnt/dumps/");
echo "<pre>"; print_r($dir_files); echo "</pre>";
foreach($ip_address_list as $ip){
$new_ip = preg_quote($ip);
foreach($dir_files as $file){
if(!preg_match("/^{$new_ip}_public.{0,10}.txt/", $file)){
$fpath = "/mnt/dumps/{$ip}_public.txt";
}
}
if(isset($fpath)){
return $fpath;
}
}
};
Комментарии:
1. Вероятно, вам придется изменить это: [код], если($d = glob($файл, «{$ip}») == false)
2. @ChrisHaas Я отредактировал свой сценарий сейчас, чтобы
if($d = glob($ip)){ if(empty($d)){ $fpath = "/mnt/dumps/{$ip}_public.txt"; echo $fpath; print_r($d); return;
3. Отредактировано — но все равно работает не так, как ожидалось.
4. Хорошо ли структурирована папка с этими файлами? Если да, можете ли вы просто использовать
file_exists
?$test_path = "/foo/bar/{$ip}.txt";if (!file_exists($test_path)) {/*Move file here*/}
5. @ChrisHaas на самом деле нет. Файлы имеют такие имена, как
10.100.1.2_public.txt
и10.100.1.2_public@2.txt
. Вот почему я попробовал это с регулярным выражением
Ответ №1:
Вероятно, вам придется изменить, если из
if($d = glob($file, "{$ip}") == false)
Для
if($file == $ip)
PS. проверьте документацию на предмет глобуса: https://www.php.net/manual/en/function.scandir.php