【问题标题】:How To Make a PHP Script Synchronously Update From Terminal Values如何使 PHP 脚本从终端值同步更新
【发布时间】:2019-02-08 14:30:35
【问题描述】:

我使用 Raspberry Pi 创建了一个脚本,该脚本通过 Apache 服务器将 Pi 的 CPU 温度加载到浏览器上。

<?php
$temp = exec('vcgencmd measure_temp');

$temp = str_replace('temp=','',$temp);
$temp = str_replace('\'C','',$temp);

echo $temp;

?>

使用上面的代码我必须手动刷新页面才能看到最新的值。

它工作正常,但我想知道如何设置它而不必一直刷新浏览器。

在 Pi 的终端中,我可以使用“watch”命令,它会每 0.1 秒给我一次当前值。

但是通过执行这个脚本,浏览器会给我一个空白页面。

<?php
$temp = exec('watch -n 0.1 vcgencmd measure_temp');

$temp = str_replace('temp=','',$temp);
$temp = str_replace('\'C','',$temp);

echo $temp;

?>

有没有办法让使用“watch”命令的脚本与 PHP 脚本一起工作?如果没有,是否有任何其他方法可以使其在每次终端中的值更改时刷新?

注意:我是编程和使用 Pi 的新手。

非常感谢任何有用的信息!

提前谢谢你!

【问题讨论】:

  • 没有办法让 PHP 将新输出打印到页面来代替已按要求打印的内容,一个常见的解决方法是仍然有一个 PHP 页面可以为您提供温度,但要调用它每 x 秒使用 AJAX 并使用 javascript 动态更新页面。

标签: php raspberry-pi real-time-updates


【解决方案1】:

手表在你的情况下不起作用,你可以从官网调用jquery cdn然后执行这个功能。不要忘记打开控制台查看返回的内容。 F12

将此添加到您的 php 文件中。

if(isset($_GET)){

$temp = exec('vcgencmd measure_temp');

$temp = str_replace('temp=','',$temp);
$temp = str_replace('\'C','',$temp);

echo $temp;
}

然后进入你的 index.html

 $(function() {
    startRefresh();
});

function startRefresh() {
    setTimeout(startRefresh,1000); // 1000 represents 1 second, free to change
    $.get('index.php', function(data) { // i assume your index.php in same folder with your html file.
        console.log(data);
    });
}

【讨论】:

  • 对您的问题进行了错误的编辑,抱歉 - 我建议您像现在一样使用 setInterval 而不是 setTimeout。
  • 是的,但setInterval() 旨在明确执行您想要执行的操作。最终不是什么大不了的事,但这种事情将来可能会带来一些问题。
  • 首先,非常感谢您帮助我!不幸的是,由于我是这一切的初学者,我仍然有一些问题。您基本上推荐的是一个 jquery,它将每隔几秒触发一次 PHP,对吗?在我的文件夹中也只有 .php 文件。我没有使用 HTML。需要这个吗?如果是这样,我怎么能连接这两个文件?最后一个问题是,如果我必须在我的 Pi 上安装 jQuery。很抱歉提出这样的琐碎问题,再次感谢您!
  • @raspberry 它的作用是通过 JavaScript (JQuery) 向 php 页面发送请求,并且 php 通常会以 html 的形式返回它所显示的所有内容。它通过 JavaScript 返回,因此您需要对其进行处理并将其放回您的网页中。 Here's a quick tutorial on it.
  • PHP 和 HTML 齐头并进,所以你很可能在不知不觉中使用它。
【解决方案2】:

我实际上找到了一种更简单的设置方法。 我想要做的是不必手动刷新页面以获取当前温度值。

上面的答案是正确的,但我无法自己设置它,所以我想我可以添加一个标题并刷新到我的 PHP 脚本中,这将使页面每秒刷新一次(或任何需要的时间范围) .

现在的代码如下所示:

<?php header('refresh: 1');
$temp = exec('vcgencmd measure_temp');

$temp = str_replace('temp=','',$temp);
$temp = str_replace('\'C','',$temp);

echo $temp;

?>

感谢所有试图帮助我的人!

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2020-01-04
    • 2014-02-11
    • 2012-11-18
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多