Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск IP адресов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Что изменить вкоде чтобы он не учитывал пробелы
thefreedom
Отправлено: 04 Марта, 2021 - 07:46:43
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Доброго дня всем. Есть код который искал в нужном файле IP адреса и при нахождении отображал что он занят, в случае не нахождения писал что адрес свободен. Так вот с недавних пор код изменился и теперь в файле с адресами нет пробелов, поиск соответственно перестал работаь. В PHP не силён, но понимаю что нужно условия поиска поменять.
" 10.0.0.1 " - так искал (где кавычки любой код)
"10.0.0.1" - так нет (где кавычки любой код)

PHP:
скопировать код в буфер обмена
  1.  
  2. function vfcat($files)
  3. {
  4.   $ret = array();
  5.   foreach($files as $f)
  6.   {
  7.     foreach(file($f) as $l)
  8.       $ret[count($ret)] = $l;
  9.   }
  10.   return $ret;
  11. }
  12.  
  13.  
  14. function find_word($line, $w)
  15. {
  16.   foreach(preg_split("/\s/", $line) as $word)
  17.   {
  18.     if($word === $w)
  19.       return TRUE;
  20.   }
  21.   return FALSE;
  22. }
  23.  
  24.  
  25. $data = vfcat(array("base.html")); //файл для поиска
  26.  
  27.  
  28.  
  29. // Поиск по нескольким
  30.  for($hi = 0; $hi < 2; $hi++)
  31.  {  
  32.    for($low = 1; $low < 256; $low++)
  33.    {  
  34.      $ip = "10.0.".$hi.".".$low;
  35.      $found = FALSE;
  36.      foreach($data as $l)
  37.      {
  38.        if(find_word($l, $ip))
  39.        {
  40.         $found = TRUE;
  41.         break;
  42.        }
  43.      }
  44.      echo $found ? $ip. " - <font color=red>Занят</font><br>" : $ip. " - <font color=green>Свободный</font><br>";
  45.    }
  46.  }  
  47.  
 
 Top
Vladimir Kheifets
Отправлено: 04 Марта, 2021 - 11:10:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




thefreedom пишет:
Доброго дня всем. Есть код который искал в нужном файле IP адреса и при нахождении отображал что он занят, в случае не нахождения писал что адрес свободен. Так вот с недавних пор код изменился и теперь в файле с адресами нет пробелов, поиск соответственно перестал работаь. В PHP не силён, но понимаю что нужно условия поиска поменять.
" 10.0.0.1 " - так искал (где кавычки любой код)
"10.0.0.1" - так нет (где кавычки любой код)

Добрый день!
Попробуйте убрать function vfcat и применить file_get_contents,
заменить function find_word и переделать поиск:
Спойлер (Отобразить)
Удачи!
 
 Top
thefreedom
Отправлено: 04 Марта, 2021 - 11:17:58
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Он выдал: 10.0.1.255 - Занят, а такого адреса вообще нет нигде, и всё дальше вообще пусто (
Я думал нужно поменять на preg_split("/\n/", $line), но так тоже не работает.
 
 Top
Vladimir Kheifets
Отправлено: 04 Марта, 2021 - 13:38:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




thefreedom пишет:
Он выдал: 10.0.1.255 - Занят, а такого адреса вообще нет нигде, и всё дальше вообще пусто (
Я думал нужно поменять на preg_split("/\n/", $line), но так тоже не работает.


Читайте $data = file_get_contents("base.html"), preg_split не нужно использовать.
Проверяйте $data
PHP:
скопировать код в буфер обмена
  1. $ip=" 10.0.1.255 ";
  2. $pattern="/(".preg_quote(trim($ip)).")/";
  3.  
  4. $data=" 10.0.3.255 \n 10.0.2.255 \n 10.0.1.255\n";
  5. echo "6: ", preg_match($pattern, $data ),"<br>";
  6.  
  7. $data=" 10.0.3.255 \n 10.0.2.255 \n";
  8. echo "7: ", preg_match($pattern, $data );
  9. /*
  10. 6: 1
  11. 7: 0
  12. */
Если не получится, покажите,пожалуйста, что у Вас в $data
 
 Top
Строитель
Отправлено: 04 Марта, 2021 - 14:02:08
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Vladimir Kheifets пишет:
покажите, пожалуйста, что у Вас в $data
С этого сразу надо было начать Закатив глазки
 
 Top
Vladimir Kheifets
Отправлено: 04 Марта, 2021 - 14:44:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Строитель пишет:
Vladimir Kheifets пишет:
покажите, пожалуйста, что у Вас в $data
С этого сразу надо было начать Закатив глазки

Согласен. Если надеяться на лучшее и файл удасться прочить, то можно из кода убрать циклы для перебора адресов и оставить только:[PHP]$data = file_get_contents("base.html")
$pattern="/(10\.0\.)([0-2]\.)([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/";
$found = preg_match($pattern, $data );

(Отредактировано автором: 05 Марта, 2021 - 06:45:44)

 
 Top
thefreedom
Отправлено: 04 Марта, 2021 - 18:39:53
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Строитель пишет:
Vladimir Kheifets пишет:
покажите, пожалуйста, что у Вас в $data
С этого сразу надо было начать Закатив глазки


Решил немного по другому, оказывается все IP адреса заключены в <a9>10.0.0.128<a9>
Поэтому просто использовал:



И все равно спасибо за быстрые ответы и помощь.

(Отредактировано автором: 04 Марта, 2021 - 18:41:40)

 
 Top
Vladimir Kheifets
Отправлено: 05 Марта, 2021 - 10:47:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




thefreedom пишет:
Решил немного по другому, оказывается все IP адреса заключены в <a9>10.0.0.128<a9>
Поэтому просто использовал:

Жаль, что от preg_split Вы не хотите отказаться. А вдруг опять структура файла изменится - будет что-то другое вместо <a9>?
Если Вы обязательно хотите выбрать все IP адреса из $data в массив то сделайте так:
Спойлер (Отобразить)
Ваша логика проверки вызывает сомнение, но я её не менял,
но думаю всё таки правильнее делать проверку IP адресов в $data
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 05 Марта, 2021 - 14:49:34)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB