2017-01-16 65 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!