2012-05-30 25 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