2017-01-16 2 views
2

Я в настоящее время есть этот код, который работает как PHP скрипт, который позволяет мне знать, если ПК пингом:Прицепные IP-адреса и имена компьютеров из текстового файла

<!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> 

Я хочу, чтобы вытащить имя компьютера и адресные данные из столбцов в текстовом файле, а не как:

pc1 10.191.10.1 
pc2 10.191.10.2 
pc3 10.191.10.3 
pc4 10.191.10.4 

и так далее ... так что мы можем добавить в список, и он будет продолжать идти.

+0

'file_put_contents()' http://php.net/manual/en/function.file- put-contents.php – Kisaragi

+0

Я думаю, что было бы лучше с json-файлом, а не с плоским текстовым файлом. 'data = {'pc1': '10.191.10.1', 'pc2': '10.191.10.1' ....}', тогда вы можете использовать его так: 'var pcs = JSON.parse ('.. /../data/file.json '); alert (pcs.data.pc1); 'Не проверял его. –

+0

ссылка [ваш другой вопрос] (http://stackoverflow.com/questions/41681077/need-to-track-pc-down-times-using-php-ping-and-display-time-down-dhhmm/41682607) здесь для справки, так как это связано. –

ответ

1

попробовать что-то вроде этого:

<?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 
+0

, похоже, работает, но, это только загрузка первой строки данных ... –

+0

Интересно, нужно ли мне маркировать верхнюю часть документа, чтобы она распознавала столбцы? –

+0

Sweet, заставил его вести себя после того, как я прибрал txt-файл! Это сумасшествие, чтобы спросить, но лейс говорит, что я хотел пойти дальше и показать офф-лайн в красном txt, и он-лайн в зеленом –

0

Вы можете использовать регулярные выражения запрос на извлечение 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! 
Смежные вопросы