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
Форумы портала PHP.SU :: Версия для печати :: Поиск IP адресов
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Поиск IP адресов

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

1. thefreedom - 04 Марта, 2021 - 07:46:43 - перейти к сообщению
Доброго дня всем. Есть код который искал в нужном файле 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.  
2. Vladimir Kheifets - 04 Марта, 2021 - 11:10:32 - перейти к сообщению
thefreedom пишет:
Доброго дня всем. Есть код который искал в нужном файле IP адреса и при нахождении отображал что он занят, в случае не нахождения писал что адрес свободен. Так вот с недавних пор код изменился и теперь в файле с адресами нет пробелов, поиск соответственно перестал работаь. В PHP не силён, но понимаю что нужно условия поиска поменять.
" 10.0.0.1 " - так искал (где кавычки любой код)
"10.0.0.1" - так нет (где кавычки любой код)

Добрый день!
Попробуйте убрать function vfcat и применить file_get_contents,
заменить function find_word и переделать поиск:
Спойлер (Отобразить)
Удачи!
3. thefreedom - 04 Марта, 2021 - 11:17:58 - перейти к сообщению
Он выдал: 10.0.1.255 - Занят, а такого адреса вообще нет нигде, и всё дальше вообще пусто (
Я думал нужно поменять на preg_split("/\n/", $line), но так тоже не работает.
4. Vladimir Kheifets - 04 Марта, 2021 - 13:38:02 - перейти к сообщению
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
5. Строитель - 04 Марта, 2021 - 14:02:08 - перейти к сообщению
Vladimir Kheifets пишет:
покажите, пожалуйста, что у Вас в $data
С этого сразу надо было начать Закатив глазки
6. Vladimir Kheifets - 04 Марта, 2021 - 14:44:08 - перейти к сообщению
Строитель пишет:
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 );
7. thefreedom - 04 Марта, 2021 - 18:39:53 - перейти к сообщению
Строитель пишет:
Vladimir Kheifets пишет:
покажите, пожалуйста, что у Вас в $data
С этого сразу надо было начать Закатив глазки


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



И все равно спасибо за быстрые ответы и помощь.
8. Vladimir Kheifets - 05 Марта, 2021 - 10:47:22 - перейти к сообщению
thefreedom пишет:
Решил немного по другому, оказывается все IP адреса заключены в <a9>10.0.0.128<a9>
Поэтому просто использовал:

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

 

Powered by ExBB FM 1.0 RC1