Запустите внешнюю программу в PHP повторяющихся - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу запустить программу, написанную на c ++, на повторяющемся веб-сервере.Потому что есть кое-что, что php не может сделать, но c ++ может сделать это легко.

Я искал и обнаружил, что это можно сделать с помощью функции exec в php.

Я использовал это в 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>

, но он печатает всегда одинаково!

Есть ли другой способ сделать это?Спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018

Поскольку код php выполняется только 1 раз.Используйте Ajax в качестве опции.

// обновлено на следующий день.1. file (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, потому что 1000 мс = 1 с (программа на C ++ возвращает время в секундах!).

2) Итак, print_date.php равно

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