我有以下脚本可以完成我想要的操作
<?php
$data = array(); // define array
exec('faxstat -s', $data, $ret); // execute command, output is array
echo "<pre>";
if ($ret == 0) { // check status code. if successful
foreach ($data as $line) { // process array line by line
echo "$line \n";
}
} else {
echo "Error in command"; // if unsuccessful display error
}
echo "</pre>";
?>
FAXSTAT是hylafax用于监控通道状态的命令。
示例输出如下:
Modem ttyIAX017 (+1.999.555.1212): Running and idle
Modem ttyIAX018 (+1.999.555.1212): Running and idle
Modem ttyIAX019 (+1.999.555.1212): Running and idle
Modem ttyIAX020 (+1.999.555.1212): Running and idle
Modem ttyIAX021 (+1.999.555.1212): Running and idle
现在我想用频道17修改Modem ttyIAX017 (+1.999.555.1212)
。
我想对所有具有相应频道号的频道做同样的事情。有没有办法做到这一点。
我在谷歌搜索过很多但找不到任何相关内容。
请帮忙。
答案 0 :(得分:0)
替换
的行echo "$line \n";
到
echo "Channel ".substr($line, 13, 2)." ".substr($line, 33);
这是如何运作的?
substr($ line,13,2)计算在“Channel”之后打印的两个数字,substr($ line,33)隐藏我们不想打印的字符串部分。
如果需要,您可能需要更改数字13,2和33.
答案 1 :(得分:0)
谢谢你的解决方案。 我只需修改脚本以显示每行一个通道,如下所示:
echo "Channel ".substr($line, 12, 3)." ".substr($line, 33)." \n";
还有一种方法可以跳过第一行并使用你给出的代码用于其余行。 示例:正常输出将为:
HylaFAX scheduler on Server.domain.pvt: Running Modem boston18 (+1.999.555.1212): Running and idle Modem boston10 (+1.999.555.1212): Running and idle
首选输出应为:
HylaFAX scheduler on Server.domain.pvt: Running Channel 01: Running and idle Channel 02: Running and idle Channel 03: Running and idle如果可能的话,我想跳过第一行,每行显示一个剩余的频道信息。
答案 2 :(得分:0)
我正在研究php手册,找到了我想要的东西。 我通过添加以下代码跳过了数组中的第一行:
if(!isset($flag_first)) { //skip first line from array
$flag_first=1;
continue;}
echo“Channel”.substr($ line,12,3)。“”。sububtr($ line,33)。“\ n”;
谢谢sp2hari的帮助。