2013-07-31 29 views
1

我已經建立了一個LAMP Web服務器,並且我正在尋找在客戶端單擊服務器Web界面上的按鈕時在服務器端運行應用程序。此應用程序將通過序列號查找某個USB設備,將其打開並向設備發送一個字節數據包。LAMP Web服務器:在服務器端執行應用程序無法檢測到USB設備

我有一個index.html,它只有一個動作的按鈕來調用我的test.php文件,它使用shell_exec()來調用我的應用程序。

當通過Web界面調用應用程序時,應用程序寫出一個錯誤,指出它無法打開USB設備(這是此應用程序的內置錯誤,因此應用程序工作,它只是無法找到USB設備)。

但是當我通過終端調用應用程序,該應用程序發現USB設備,並寫入到它沒有問題。

我要尋找一些建議!簡而言之,我做得可行嗎?如果是這樣,當通過Web界面調用時,如何讓應用程序找到USB設備?我有一種感覺,它與權限有關,你永遠不知道。

test.php的:

<?php echo shell_exec("/home/pi/FDTI_test/FDTI_test_application"); ?>

注: USB設備連接,其驅動程序的偉大工程,並通過USB連接到服務器。

的應用程序時,通過在服務器端的終端調用,而不是在通過Web界面調用工作。

+1

我的第一個猜測是apache用戶(在Ubuntu這將是www數據)沒有打開USB設備的權限。 –

+0

是的,這是問題,只需要添加www-data到usb設備的權限!多謝你們 –

回答

1

我覺得你在正確的軌道上這個是一個權限問題。

在一個典型的LAMP堆棧中,php進程作爲apache進程中的一個模塊運行,除非您對其進行了不同的配置。在我選擇的服務器操作系統中,php進程默認運行爲用戶'www-data'。

可能最簡單的解決方案是將sudo權限授予您的Web用戶帳戶,並將sudoers文件設置爲NOPASSWD。這是非常不安全的,所以只有在極少數情況下才能做到這一點。

<?php echo shell_exec("sudo /home/pi/FDTI_test/FDTI_test_application"); ?> 

下一個最簡單的選擇是給Web用戶帳戶直接寫入USB設備的權限。根據你的分佈,你可能只需要add the user到'adm'組。

sudo usermod -a -G adm www-data 

同樣,這可能不是最安全的方法,但比第一個選項更安全。

最後,你可以看看最難的解決方案,它將安裝允許suexec的補丁版本的apache。這與第二種選擇一樣不安全,但實施起來要困難得多。 (我會包括一個教程的鏈接,但我限於2個鏈接,因爲這是我的第一個答案。)

希望這會有所幫助!

相關問題