【问题标题】:Using HTML tags inside PHP在 PHP 中使用 HTML 标签
【发布时间】:2018-04-19 09:37:30
【问题描述】:

背景

我在各种树莓派上有一个 playlog.csv 文件,格式如下:

2018-03-22 12:43:21,NM_Test.h264,-2 //PI 1
2018-03-22 12:43:21,NM_Test.h264,-2 //PI 2
2018-03-22 12:43:21,vid.h264,0 //PI 3

我可以通过以下方式连接到每个 PI 并跟踪 CSV 文件:

<DOCTYPE html>
<html>

<style>
#circleRed {
    background: #ff0000;
    width: 15px;
    height: 15px;
    border-radius: 50%;
}

#circleGreen {
    background: #00ff00;
    width: 15px;
    height: 15px;
    border-radius: 50px;
}
</style>

<?php
    require_once 'Net/SSH2.php';
    require_once 'phpseclib1.0.10/Crypt/RSA.php';
    $config = require 'config.php';
    $log = 'logfile.txt';

    if(is_array($config)){
        foreach($config as $cred){
            $ssh = new Net_SSH2($cred['ip'], $cred['port']); //get the IP and port 
            $key = new Crypt_RSA();
            $key->loadKey($cred['key']);

            if (!$ssh->login('pi', $key)){
                //logging with file_put_contants, Append mode, exclusive lock is more race condition safe then an open file handle.
                file_put_contents($log, "[".date('Y-m-d H:i:s')."]Login Failed for {$cred['ip']}\n", FILE_APPEND|LOCK_EX);
                continue;
            }

            $output = $ssh->exec('tail -1 /var/log/playlog.csv');    
        }
    };

    $array = explode(',',$output);

    if(in_array('0', $array, true)){
        echo '<div id="circleGreen"></div>';
    }
    if (in_array('-2'||'-3'||'-4'||'-5', $array, true)){
        echo '<div id="circleRed"></div>';
    }
 ?>

 </body>
 </html>

问题

查看最右边的值,如果值为'-2'或'-3'等,我想显示一个红色圆圈,但如果值为'0',我想在我的网页上显示一个绿色圆圈。我正在尝试对通过 SSH 连接的所有 PI 执行此操作。

但目前当我运行我的代码时,我得到一个空白网页,我无法弄清楚我做错了什么?

【问题讨论】:

  • 您检查过$arrayexplode () 之后的内容吗?
  • in_array('-2'||'-3'||'-4'||'-5', $array, true) 这没有意义,指针设置为“-2”,因为该值是真实的
  • 嗨@wayneOS,不,我没有。但我刚刚在$array 上做了一个回声,我收到了Array to string conversion PHP 通知。我会调查一下,也许这就是我的代码失败的原因?
  • 使用print_r()
  • I get a blank webpage,开启报错

标签: javascript php html arrays explode


【解决方案1】:

你需要小心 in_array() 的严格模式,因为它是类型敏感的。对于您的情况,您可以检查最后一个元素是否小于零。这是一个例子。虽然在你的 foreach 循环中做所有事情来检查每个 pi 的返回值。

foreach (...) {

    ...
    $output = $ssh -> exec ('tail -1 /var/log/playlog.csv');
    $array = explode (',', $output);

    if (end ($array) >= 0) {
        echo '<div id="circleGreen"></div>';
    } else {
        echo '<div id="circleRed"></div>';
    }

}

【讨论】:

  • 您的代码对于我想要实现的目标来说是如此简单!但是您的代码仅适用于第一个返回的输出。所以目前我的$output 将返回2018-04-18 12:55:29,nmmoney_2.h264,-2 2018-04-19 10:26:29,eurochange.h264,0 但if 语句只查看2018-04-18 12:55:29,nmmoney_2.h264,-2 并打印红色圆圈。它应该读取下一个输出2018-04-19 10:26:29,eurochange.h264,0 并打印一个绿色圆圈?
  • 那么你需要把你的输出放到foreach循环中。我将取消更新我的答案。
【解决方案2】:

线

in_array('-2'||'-3'||'-4'||'-5', $array, true)

没有按照你的想法做。 in_array 只能接受 $needle 参数的一个值 - 此行会将初始表达式评估为布尔值 true,然后检查 $array 是否包含该确切值。

如果您想检查两个数组之间是否有任何重叠(即值 -2、-3、-4 或 -5 是否存在于分解线中的任何位置),您可以使用array_intersect,例如

if (count(array_intersect(['-2', '-3', '-4', '-5'], $array))) {
  ...

【讨论】:

  • 或者不使用你可以使用的所有各种函数,只使用explode,并获取分解字符串中的最后一个元素,然后简单地使用比较if ( last exploded element == 0)if ( el == &lt; 0),就是这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
相关资源
最近更新 更多