2012-05-30 27 views
2

所以,我有这种情况:PHP WebGUI来控制CLI应用程序

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

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

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

谢谢。

回答

1

交互式应用程序是什么意思?你是否通过从shell调用(如[email protected]$ application --stop)向它们发送命令,或者它们是否提供自己的shell(如postgres或mysql CLI客户端等)?

使用EXEC()发送命令和读取输出:通过简单地将其重定向到文件

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

您可以保存应用程序持续输出和加载网页时,从该文件与PHP读取。添加一些JavaScript来自动重新加载页面,例如,在10秒内一次,并且不会导致CPU死机。事情是这样的:

[email protected]$ 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过滤输出数据。

+0

嗨,他们提供自己的外壳。无论如何,如果我执行'exec'重定向输出,它会阻止PHP执行,直到过程结束? – TCB13

+0

它会阻止。难道他们真的提供批量模式吗?如果不是,我不知道你是如何实现目标的。可能会带** expect **命令或类似的东西。但这将是一个很大的痛苦。 – Alexander

+0

其实我在这里找到http://stackoverflow.com/questions/3819398/php-exec-command-or-similar-to-not-wait-for-result,如果你重定向它不会阻止。我要开始尝试一些东西。感谢所有。 – TCB13