PHP修剪问题



在过去的4个小时里,我一直在摇头,我不明白为什么我的第二次修剪会产生重复。这个没有修剪的代码工作得很好,可以产生我想要的东西。

<h1>Offline Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $response);
foreach($response as $line) {

$offline = $line;
if (strpos($offline, "UNKNOWN")>0) {
print "<span style='color:red;'>$offline</span><br>";  
}
}
?>
<h1>Online Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $responses);
foreach($responses as $lines) {
$online = $lines;

if (strpos($online, "OK")>0) {
print "<span style='color:green;'>$online</span><br>";   
}
}
?>

上述代码产生:离线电话

302(未指定)D N A 0未知303(未指定)D N A 0未知304(未指定)D N A 0未知305(未指定)D N A 0未知306(未指定)D N A 0未知在线电话

301/301 192.168.1.96 D N A 45009正常(6毫秒)307/307 192.168.1.112 D N A 50175 OK(5 ms)

但是,当我向两个查询添加trims(请参阅下面的代码)时,第二个查询具有重复项。

<h1>Offline Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $response);
foreach($response as $line) {

$offline = $line;
if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";  
}
}

// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $responses);
foreach($responses as $lines) {
$online = $lines;

if (strpos($online, "OK")>0) 
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";   
}
}
?>

此代码产生重复项,如下面的输出所示。你会注意到我甚至没有添加修剪规则。

302303304305306306306

301/301 192.168.1.96 D N A 45009正常(5毫秒)301/301 192.168.1.96 D N A 45009正常(5毫秒)301/301 192.168.1.96 D N A 45009正常(5毫秒)301/301 192.168.1.96 D N A 45009正常(5毫秒)301/301 192.168.1.96 D N A 45009正常(5毫秒)301/301 192.168.1.96 D N A 45009正常(5毫秒)307/307 192.168.1.112 D N A 50175正常(5毫秒)307/307 192.168.1.112 D N A 50175 OK(5 ms)

应该只有301/301 192.168.1.96 D N A 45009 OK(5毫秒)&此处为307/307 192.168.1.112 D N A 50175 OK(5 ms)。有人能告诉我哪里出了问题吗?

提前感谢。

您错过了{}括号。您希望在if之后运行的所有代码都应该包含在那里。所以

if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";  
}

应该是

if (strpos($offline, "UNKNOWN")>0)
{
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";  
}
}

与下一个代码块相同

if (strpos($online, "OK")>0) 
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";   
}

应该是

if (strpos($online, "OK")>0) 
{
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";   
}
}

这不是trim()的问题,而是将$online分配给$clean_onlinestrpos条件,只计算一次,并在所有后续迭代中使用。

这看起来不正确:

foreach($response as $line) {
$offline = $line;
if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";  
}
}

它应该是这样的:

foreach($response as $line)
{
// strpos returns a position if exists, ZERO is valid
// you get boolean false if it does not exist
if(strpos($line, "UNKNOWN"))
{
echo "<span style='color:red;'>".trim($line, '(Unspecified) D N A 0 UNKNOWN')"</span><br>";     
}
elseif(strpos($online, "OK"))
{
echo "<span style='color:green;'>".trim($line)."</span><br>";
}
}

相关内容

  • 没有找到相关文章

最新更新