【问题标题】:PHP WebGUI to control CLI applicationPHP WebGUI 控制 CLI 应用程序
【发布时间】:2012-05-30 10:48:47
【问题描述】:

所以,我有这个场景:

运行 Debian、XAMPP 和一些 CLI 应用程序的嵌入式设备。

那些 CLI 应用程序是交互式的,它们每秒更新一次数据,用户可以向终端输入命令来改变它们的行为。

如何在不使用终端的情况下以 PHP/HTML 启动/停止/交互/读取这些应用程序中的数据构建 WebGui?我应该使用 proc_open 还是 exec?在不创建 CPU 杀手循环的情况下更新数据的最佳方法是什么?

谢谢。

【问题讨论】:

    标签: php user-interface embedded command-line-interface


    【解决方案1】:

    交互式应用程序是什么意思?您是通过从 shell 调用(如user@device$ application --stop)向他们发送命令,还是他们提供自己的 shell(如 postgres 或 mysql CLI 客户端等)?

    使用 exec() 发送命令并读取输出:

    $ls_output = exec('ls -l');
    

    您可以通过简单地将其重定向到文件并在加载网页时使用 PHP 从该文件中读取来保存持续的应用程序输出。添加一些 javascript 以自动重新加载页面,例如,每 10 秒一次,它不会占用 CPU。像这样的:

    user@device$ application --do-some-work > application_output
    

    在 PHP 中:

    $app_output = file_get_contents("application_output");
    

    甚至使用 GNU CLI 工具和 PHP exec():

    $app_output = exec('tail -n 100 application_output | grep FAIL');
    

    但这似乎更像是发明自行车,因为您可以在 PHP 中过滤输出数据。

    【讨论】:

    • 嗨,他们提供自己的外壳。无论如何,如果我执行exec 重定向输出,它会阻止 PHP 执行直到进程完成?
    • 它会阻塞。他们真的不提供批处理模式吗?如果不是,我不知道您如何实现目标。可能与 expect 命令或类似的东西一起使用。但这将是一个很大的痛苦。
    • 其实我在这里找到stackoverflow.com/questions/3819398/…,如果你重定向它不会阻塞。我要开始尝试一些东西。谢谢大家。
    • 最大的问题是:你将如何发送命令?祝你好运! :)
    • 我正在阅读proc_open(),它有一些相关的功能可能对此有所帮助;)
    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多