2016-08-18 97 views
0

我有一個插入到我的USB端口的開銷控制器(一些機器人的魔棒)。 我想在linux上創建一個Web服務器,允許用戶向機器人發送預加載的代碼(所以沒有人輸入任何內容)。我已將該命令嵌入到一個腳本文件中,我試圖在一個php文件中執行該腳本文件。在Web服務器上按下按鈕時,會執行在php中執行腳本文件的代碼位。但是,當我按下按鈕什麼都沒有發生。代碼不會發送到控制器,也不會發生錯誤。 我可以在命令行中運行腳本,沒有任何問題。但是,當我嘗試執行它從Web服務器運行它,沒有任何反應。有沒有辦法解決這個問題? 這是什麼在PHP文件如何在php中執行腳本

<html> 
<body> 
<h1><font face="verdana" color="green">SwarmArena</font></h1> 
<hr> 
<form action = "<?php $_PHP_SELF ?>" method = "POST"> 
Name: <input type ="text" name = "name"/>. ; <br> 
Age: <input type ="text" name="age"/>. ; <br> 

New Code: <textarea cols=40 rows=10 name="Newcode">Default text</textar$ 
<input type = "submit" name="enter" value="Enter" /> 
<input type = "submit" name="insert" value="insert" /> 
<input type = "submit" name="select" value="select" /> 
<input type = "submit" name="sleep" value="sleep" /> 
<input type = "submit" name="reset" value="reset" /> 
</form> 
</body> 
</html> 

<?php 

if(isset($_POST['sleep'])){ 
$out = shell_exec('./sleep.sh'); 
echo "$out"; 
} 
?> 

這是什麼在sleep.sh

#!/bin/sh 

cd kilocmd && ./kcmd -s /dev/ttyUSB0 -c sleep 
echo "done"; 

感謝

+0

問題你如何試圖從Web服務器執行呢? –

+0

你可以顯示代碼和執行方式嗎? – Cagy79

+1

應該很高興看到你到目前爲止建立了什麼。所以我們可以幫助你。 –

回答

0

假設你從PHP腳本正確執行的命令,它可能是查看權限問題很有用。

登錄Web服務器正在運行的用戶並嘗試從那裏手動執行該命令。我個人有我的網絡服務器運行在用戶名爲apache

查看當前用戶在命令行中運行whoami

更改用戶運行su - newuserhere

如果這樣做,或者您正在運行的網頁服務器在root下,那麼您最有可能排除任何權限問題。

+0

我正在root下運行webserver。 –

3

我不知道你是如何做到這一點的。但點擊它應該提交到一個PHP頁面的按鈕,該頁面將使用exec and shell_exec php命令運行shell腳本。

更是以上幾種可能性可能會導致像

- exec and shell_exec are disabled in php.ini 
- The path to the executable is wrong. If the script is in the same 
    directory as the php file, try exec(dirname(__FILE__) . 
    '/myscript.sh'); 
+0

當你說_FILE_你的意思是php文件的名字? –

+0

不,不是它不是文件名,它是一個php內置的魔術常數返回父目錄的路徑,你不需要做這個「dirname(__ FILE__)」 –

+0

謝謝,但這並不起作用。如果我運行shell_exe,它會給我輸出我期望使用終端的輸出,但是好像它沒有與usb端口對話 –