mariusz g
17.04.2009, 00:05:29
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 ?
<?php
$ip = gethostbyname("nazwa komputera");
$ping="ping ".$ip." -n 1";
//echo '<pre>';
//echo '</pre>';
$arp="arp -a ".$ip;
//echo '<pre>';
//echo '<pre>';
?>
Użyj funkcji
exec():
http://docs.php.net/manual/en/function.exec.phpPonadto polecenie
ping ma "trochę" inną składnię, a sam skrypt nie jest zabezpieczony przed sytuacją, gdy
arp zwraca błąd...
mariusz g
17.04.2009, 07:19:40
chcę aby mac automatycznie dodawał się do bazy a z exec() chyba nie da rady
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
17.04.2009, 12:09:13
Zrobiłem tak:
Działa - pytanie czy może tak pozostać
<?php
$computername = "nazwa kompa";
$ip = gethostbyname($computername);
if($ip == $computername ) {
}else{
exec("ping ".$ip." -n 1 -w 90 && exit", $output); //echo '<pre>';
//print_r($output);
//echo '</pre>';
exec("arp ".$ip." -a && exit", $output2); //echo '<pre>';
//print_r($output2);
//echo '</pre>';
//echo '<pre>';
//print_r($dane);
//echo '</pre>';
$x=1;
while($x <= 20){
$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); if ($szukaj_mac){
$adres_mac = $result[0];
$x =20;
}
$x++;
}
}
?>
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()).