В настоящее время у меня есть этот код, который работает как PHP-скрипт, который позволяет мне узнать, пишут ли ПК:
<!DOCTYPE html> <html> <head> <meta http-equiv="refresh" content="30"> </head> <body> <h1>PC Test Ping Status</h1> <?php $host="10.191.10.98"; exec("ping -c 2 " . $host, $output, $result); if ($result == 0) echo "<p>p2 On-Line</p>"; else echo "<p>p2 Off-Line !</p>"; $host="10.191.10.125"; exec("ping -c 2 " . $host, $output, $result); if ($result == 0) echo "<p>p3 On-Line</p>"; else echo "<p>p3 Off-Line!</p>"; ?> </body> </html>
Я хочу вывести имя и адрес компьютера из столбцов в txt-файле, а именно:
pc1 10.191.10.1 pc2 10.191.10.2 pc3 10.191.10.3 pc4 10.191.10.4
и так далее … поэтому мы можем добавить в список, и он будет продолжать.
Попробуйте что-то вроде этого:
<?php $file = file_get_contents('textfile.txt'); //Replace with full path to the file. $lines = explode("\n", $file); //Might have to use \r\n depending on your system. foreach($lines as $pingTarget) { $pcs = explode(' ',$pingTarget); $host=$pcs[1]; exec("ping -c 2 " . $host, $output, $result); if ($result == 0) echo "<p>".$pcs[0]." On-Line</p>"; else echo "<p>".$pcs[0]." Off-Line !</p>"; } ?>
Таким образом вы будете извлекать содержимое текстового файла, а затем прокручивать каждую строку, предоставляя выходные данные для каждой системы.
В зависимости от ваших тайм-аутов вы можете установить ограничение времени внутри цикла, чтобы дать каждой системе ответить, особенно если у вас есть длинный список ПК для пинга:
set_time_limit(5); //Set time in seconds
Вы можете использовать запрос RegEx для извлечения IP-адресов, а затем добавить их в массив. Кроме того, вместо того, чтобы вручную добавлять имена хостов, пусть PHP разрешает имена хостов для вас, используя gethostbyaddr($v)
. В моем примере я использовал Google DNS для отображения разрешения DNS и ваших личных IP-адресов, которые я не могу решить, поскольку они не находятся в моей локальной сети. Это удобно, потому что, если вы когда-либо переименовываете ПК, или ваши IP-адреса используют DHCP (захватывает новый IP-адрес каждые X дней), вам не нужно обновлять текстовый файл.
$ipLst = file_get_contents('ip.txt'); preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $ipLst, $ipArr); //Match an IP and add to ipArr Array foreach($ipArr[0] as $k=>$v) { //Loop through ipArr $hostname = gethostbyaddr($v); //Reverse lookup to resolve hostname exec("ping -c 2 " . $v, $output, $result); if ($result === 0) { echo "<p>$hostname is On-Line!</p>"; //Echo Hostname or IP if its unable to resolve }else{ echo "<p>$hostname is Off-Line!</p>"; //Echo Hostname or IP if its unable to resolve } }
Текстовый файл:
pc1 8.8.8.8 pc2 10.191.10.2 pc3 10.191.10.3 pc4 10.191.10.4
Вывод:
google-public-dns-a.google.com is On-Line! 10.191.10.2 is Off-Line! 10.191.10.3 is Off-Line! 10.191.10.4 is Off-Line!