Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem
Forum PHP.pl > Forum > PHP
NoSleep2
Witam,
Mam problem z Stringiem/tablica w sumie nie wiem, bo jeżeli daje if(is_array()) to nic się dzieje, a jeżeli nie dam is_array foreach krzyczy mi: " Invalid argument supplied for foreach()".

Sposób działa kodu :
Loguję po przez SSH na Mikrotika (brzegowego), pobieram wartość ARP poleceniem "ip arp print" to wszystko super działa dostaje wartość do zmiennej, później wklejam to do kodu który powinien mi to przerabić w sposób czytelny dla mojego przełożonego . Ale niestety nie przerabia blokuje się na foreach. Dodam że kiedy strumień danych zapisze w pliku, a później pobiorę wartości z pliku działa normalnie, ale stwierdziłem że szkoda mi miejsca na dysku, żebym co jakiś czas zapisywał wartości z arp'a:


** // - sposób wyświetlenia danych, lub krótki opis działania
  1.  
  2. if($conn == true) { // $conn to połaczenie ssh2 : ssh2_connect($Adres_ip, $ssh_port_mt) - to działa OK
  3. $stdout_stream = ssh2_exec($conn, '/ip arp print');
  4. $dio_stream = ssh2_fetch_stream($stdout_stream, SSH2_STREAM_STDIO);
  5. stream_set_blocking($dio_stream, true);
  6. $result_dio = stream_get_contents($dio_stream);
  7. }
  8.  
  9. $i = 0;
  10. $test - array($result_dio);
  11. // OR
  12. $test = $result_dio;
  13. foreach ($test as $value){
  14. $i++;
  15. if($i >= 4 && !empty($value)){ // komentarze np : Flags: X - disabled, I - invalid, H - DHCP, D - dynamic, P - published, oraz czy wartosc nie jest pusta
  16. // 904 D IP Bridge
  17. $mac_list = array(" "," "," ");
  18. $mac_ad = str_replace($mac_list,'|_|', $value);
  19. // 906 D Adres IP|_|Bridge|_|
  20. if(substr_count($mac_ad, '|_|') != "2")
  21. {
  22. //886 DC AdressIP MAC Bridge|_|
  23. $vowels = array(' ', ' ',' ',' ', ' ');
  24. $arp = str_replace($vowels,' ', $mac_ad);
  25. if($i >= 4 && $i <= 13){ // wartosci ponizej 10 (liczone z komentarzami u gory)
  26. //0-9 DC IP Mac bridge|_|
  27. list($spacja, $numer, $flags, $ip, $mac, $inter) = explode(" ", $arp);
  28. }elseif($i >= 13){
  29. //10-x DC IP Mac bridge|_|
  30. @list($numer, $flags, $ip, $mac, $inter) = explode(" ", $arp);
  31. }
  32. $ip_adres = array('IP','IP','IP','IP'); // nie zarejestrowane adresy IP w bazie, ale używane w firmie.
  33. if(!in_array($ip, $ip_adres)){
  34. $sql = 'select name, inet_ntoa(ipaddr) from nodes where inet_ntoa(ipaddr) = \''.$ip.'\'';
  35. $result = $mysqli->query($sql);
  36. if($row = $result->fetch_assoc()){
  37. //echo ($row['name']. ' | '. $ip . PHP_EOL);
  38. } elseif(!empty($ip)) {
  39. echo ( $ip . ' -> Brak danych o Tym Adresie IP ' . PHP_EOL) ;
  40. }
  41. }
  42. }
  43. }
  44. }


Niestety nie mogę podać wartości var_dump pełnej więc tylko początek:
  1. var_dump ($result_dio);
  2.  
  3. Wynik:
  4. string(77890) "Flags: X - disabled, I - invalid, H - DHCP, D - dynamic, P - published,
  5. C - complete
  6. # ADDRESS MAC-ADDRESS INTERFACE
  7. /*** XXX adresow IP z MAC oraz interface **/
ohm
Masz jak byk napisane

Cytat
Wynik:
string(77890)


Więc to nie jest array, is_array w tym przypadku zwróci false, więc normalne że nic się nie wykona. Musisz tego stringa obrobić, jakimś explode czy preg_match, czy co tam potrzebujesz wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.