Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja system - ukrycie drukowania
Forum PHP.pl > Forum > Przedszkole
mariusz g
witam

Chciałbym aby poniższy skrypt drukował tylko sam efekt końcowy - adres mac
Co zrobić żeby nie drukował pingów i zapytania arp ?


  1. <?php
  2. $ip = gethostbyname("nazwa komputera");
  3. $ping="ping ".$ip." -n 1";
  4.  
  5. //echo '<pre>';
  6. $result=system($ping);
  7. //echo '</pre>';
  8.  
  9. $arp="arp -a ".$ip;
  10. //echo '<pre>';
  11. $result=system($arp);
  12. //echo '<pre>';
  13.  
  14. $dane=explode($ip." ", $result);
  15. $mac=substr($dane[1],8,17);
  16.  
  17. echo $mac;
  18. ?>
Zyx
Użyj funkcji exec():

http://docs.php.net/manual/en/function.exec.php

Ponadto polecenie ping ma "trochę" inną składnię, a sam skrypt nie jest zabezpieczony przed sytuacją, gdy arp zwraca błąd...
mariusz g
chcę aby mac automatycznie dodawał się do bazy a z exec() chyba nie da rady
Zyx
A co ma wspólnego exec() z bazą danych? Zajrzałeś chociaż pod podany odnośnik czy tak sobie napisałeś, bo gdzieś tam w którymś kościele dzwonią, ale nie wiadomo w którym? Jak piszę, że exec(), to exec() i tyle. Chcesz, by nie wyświetlało wyjścia, to podałem Ci funkcję, która nie wyświetla wyjścia. Związek z tym, co później zrobisz z tymi danymi - zapiszesz do bazy, do pliku, wydrukujesz i wyślesz na księżyc (niepotrzebne skreślić) jest zerowy.
mariusz g
Zrobiłem tak:
Działa - pytanie czy może tak pozostać


  1. <?php
  2. $computername = "nazwa kompa";
  3.  
  4. $ip = gethostbyname($computername);
  5. if($ip == $computername ) {
  6.    echo "Brak ip";
  7. }else{
  8.    exec("ping ".$ip." -n 1 -w 90 && exit", $output);
  9.    //echo '<pre>';
  10.    //print_r($output);
  11.    //echo '</pre>';
  12.    exec("arp ".$ip." -a && exit", $output2);
  13.    //echo '<pre>';
  14.    //print_r($output2);
  15.    //echo '</pre>';
  16.    $dane=explode(" ", $output2[3]);
  17.    //echo '<pre>';
  18.    //print_r($dane);
  19.    //echo '</pre>';
  20.    $x=1;
  21.    while($x <= 20){
  22.       $szukaj_mac = eregi('([0-9a-z]{2}-[0-9a-z]{2}-[0-9a-z]{2}-[0-9a-z]{2}-[0-9a-z]{2}-[0-9a-z]{2})',$dane[$x],$result);
  23.       if ($szukaj_mac){
  24.          $adres_mac = $result[0];
  25.          $x =20;
  26.       }
  27.       $x++;
  28.    }
  29. }    
  30.    
  31. echo $adres_mac;
  32. ?>
Zyx
Sprawdź jeszcze, czy istnieje $output2[3] - arp nie musi tyle linijek zwrócić, szczególnie w przypadku błędu. Ponadto wywal eregi, a użyj wyrażeń regularnych Perla (funkcja preg_match()).
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.