【问题标题】:Run external program in php repetitive在php中重复运行外部程序
【发布时间】:2018-12-09 15:08:08
【问题描述】:

我想在 web 服务器上重复运行一个用 c++ 编写的程序。 因为有些事情是php做不到的,而c++却可以轻松做到。

我搜索了一下,发现可以在php中使用exec函数来完成。

我在 js setInterval 中使用它来每 100 毫秒运行一次该程序。 但似乎该程序在网页加载时运行,并且在 js 代码中,我有相同的输出。

例如,当我想从 c++ 程序中获取当前日期时。 cpp代码是:

#include <iostream>
#include <ctime>
using namespace std;
int main()
{
    time_t now = time(0);
    tm *ltm = localtime(&now);
    cout << 1 + ltm->tm_sec;
    return 0;
}

index.php 文件中,我使用它每 100 毫秒在页面上打印当前秒数。

<script>
    setInterval(function(){
        var date = "<?php passthru("print_date.exe"); ?>";
        document.write(date + "<br>");
    },100);
</script>

但它的打印总是一样的!

还有其他方法可以做到这一点吗? 谢谢!

【问题讨论】:

  • 我不知道 javascript 或 php,但我认为很有可能在这些语言中也有方法可以做任何你想做的事情。也许您应该询问您所拥有的确切用例。您还希望它在服务器端或客户端上运行吗?您不能在客户端运行这样的可执行文件。
  • 当 javascript 被渲染时,php 只会被执行一次。然后,javascript setInterval 将始终使用passthru(...) 的相同(存储)返回。您必须在 setInterval 中进行 ajax 调用才能使 php 脚本被多次调用。
  • 什么是php做不到的?获取当前日期??
  • 但无论如何要达到您的目标,cronjob 可能是正确的选择。不过很难说,因为我们不知道这个的用例。
  • 感谢您的回答。问题是从本地网络@Jeff 获取自定义 UDP 数据包数据

标签: javascript php c++ exec setinterval


【解决方案1】:

因为 php 代码只执行了 1 次。使用 Ajax 作为一个选项。

//第二天更新。 1. 文件(index.php)

<script>
var aj;

setInterval(function()
{
aj = new XMLHttpRequest();
aj.open('GET',"/print_date.php",false);
aj.onreadystatechange  = processData;
aj.send(null);
},1000);

function processData()
{
var date = '';
if (aj.readyState == 4) 
{
date = aj.responseText;
document.write(date + "<br>")   
}
}
</script>

这是非常简单的同步ajax。间隔是 1000,而不是 100,因为 1000ms = 1s(C++ 程序以秒为单位返回时间!)。

2) 所以,print_date.php 是

<?php 
 error_reporting(0); //because any warning destroys output for ajax
 passthru("print_date.exe"); 

【讨论】:

  • 您能否提供更完整的答案?也许添加一些代码示例?这似乎更像是一条评论。
  • 你能举个例子吗?
  • 这很简单。我添加代码,如果你不明白的话 - 问。
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2012-03-06
  • 1970-01-01
相关资源
最近更新 更多