0

我有一个脚本,我正在针对一组服务器运行以使用 openwsman 从它们中提取硬件数据。这是为了在一个非常开放的环境中跟踪变化,并最终更新一个 mysql 数据库以保持库存记录。问题是 preg_replace 在数组中每个值的开头和结尾添加了“1”。我敢肯定,这些步骤相当不寻常,所以我将解释每个步骤的作用并在最后提供输出。

$memsize = shell_exec("wsman enumerate http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_MemoryView -h $ipaddress -V -v -c dummy.cert -P 443 -u $user -p $pass -j utf-8 -y basic | grep 'Size'");
$memsize = trim($memsize); #Removes excess spaces at beginning and end of the output.
$memsize = str_replace('          ',',',$memsize); #Replaces spaces between values with a comma.
$memsize = explode(',',$memsize); #Converts the values pulled into an array with comma as the delimiter
$memsizepreg = preg_replace("/[^0-9]/","",$memsize); #Deletes all non-number characters.
$memsizesum = array_sum($memsizepreg); #Gets a sum of all the detected DIMMs.
echo $memsize[0];
echo "<br>";
echo $memsize[1];
echo "<br>";
echo $memsize[2];
echo "<br>";
echo $memsize[3];
echo "<br>";
echo var_dump($memsize);
echo "<br>";
echo $memsizepreg[0];
echo "<br>";
echo $memsizepreg[1];
echo "<br>";
echo $memsizepreg[2];
echo "<br>";
echo $memsizepreg[3];
echo "<br>";
echo var_dump($memsizepreg);
echo "<br>";
echo $memsizesum;

此外,如果我删除 preg_replace,array_sum 将变为空白。我输出变量 memsize、memsizepreg 和 memsize sum 变量只是为了确保提取的数据是准确的,并且无论 preg_replace 做什么,都会导致在变量的开头和结尾添加 1。

输出:

2048 
2048 
2048 
2048
array(4) { [0]=> string(24) "2048 " [1]=> string(24) "2048 " [2]=> string(24) "2048 " [3]=> string(23) "2048" } 
120481
120481
120481
120481
array(4) { [0]=> string(6) "120481" [1]=> string(6) "120481" [2]=> string(6) "120481" [3]=> string(6) "120481" } 
481924
4

1 回答 1

0

正如评论中提到的,有人建议使用“var_dump($array)”,这表明变量内容的总大小为 24 个字符长,而变量的输出仅显示 4 个字符。这是由仍然存在并由浏览器处理的 XML 标记引起的。其中一个标签中有标签,当 preg_replace 运行时,除了数字之外的所有标签都保留了,这删除了标签,但从标签中留下了 1。在收集 wsman 命令的内容后,我可以通过运行 strip_tags() 来解决此问题,然后我的值匹配。再次感谢评论 var_dump 的人。不幸的是,您删除了您的评论,所以我无法给予信任。

于 2013-10-26T02:09:33.297 回答