多数snmptable输出是每个字段有值并且内容没有空格,方便字符串分割。但是有些snmp的值为空,或者值中包含空格,这个处理起来就麻烦一些。为给监控提高效率,直接读取snmptable要快一些。
为方便snmptable输出到文件,首行为表头(不同设备导出时处理一下)
<?php
$fileName = "snmptable.txt";
//读取snmptable文件(行首为表头)
$fileArray = array_filter(explode("\n", file_get_contents($fileName)));
$tableHeader = array_filter(preg_split('/\s+/', $fileArray[0]));
//把表头格式化成数组
$newTableHeader = array();
$tempPosition = 0;
foreach($tableHeader as $key=>$value){
$start = $tempPositon;
$end = strpos($fileArray[0], $value) + strlen($value);
$newTableHeader[$value] = array("start"=>$start, "strlen"=>$end-$start);
$tempPositon = $end + 1;
}
//遍历每一行,并格式化成数组
$snmpTableArray = array();
foreach($fileArray as $line){
$temp = array();
foreach($newTableHeader as $key=>$value){
$temp[$key] = trim(substr($line,$value["start"], $value["strlen"]));
}
$snmpTableArray[] = $temp;
}
print_r($snmpTableArray);
?>