2017-01-16 51 views
2

目前,我有这个代码,它运行的PHP脚本,让我知道,如果电脑发出ping命令:从一个txt文件中提取IP地址,PC的名称

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

我想拉PC名称和从列地址数据在一个txt文件,而不是像:

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');警报(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>"; 
} 
?> 

这种方式,您将通过各行提取文本文件的内容,然后循环,使输出为每个系统。

根据您的超时您可能要设置环路内的时间限制给每个系统作出反应,特别是如果你有电脑ping一个长长的清单:

set_time_limit(5); //Set time in seconds 
+0

似乎工作,但它只是加载第一行数据... –

+0

我不知道是否需要标签文档的顶部,以识别collumns? –

+0

甜蜜,在整理了txt文件之后表现得很好!这个问题很疯狂,但莱伊斯说我想更进一步,以红色txt离线显示,并以绿色在线显示 –

0

你可以使用正则表达式查询来提取IP,然后将它们添加到数组中。另外,不要手动添加主机名,让PHP通过使用gethostbyaddr($v)来解析主机名。在我的示例中,我使用Google DNS显示了DNS解析和您的私有IP,但由于它们不在我的LAN上,因此无法解析。这很方便,因为如果您重命名PC或您的IP使用DHCP(每X天抓取一个新IP地址),则无需更新您的文本文件。

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