2017-03-05 230 views
-3

我是新來的編程在HTML/PHP/JavaScript,所以我不知道如何開始。用html按鈕執行sh文件點擊

我想在網頁上執行一個.sh文件(在Linux上)與一個按鈕(所以HTML我猜)。

我讀過,我不得不在html上製作一個按鈕,但把執行代碼放在php中,但我似乎無法將代碼製作出來。

幫助將不勝感激

這不是重複的,我說我是新的,我不知道如何使用按鈕做到這一點,這就是它是一個不同勢的問題。

+2

檢查此鏈接 - http://stackoverflow.com/問題/ 6235785/run-a-shell-script-with-a-html-button –

+0

這篇文章沒有描述使用什麼html代碼 – Thomasttw

+0

*「這篇文章沒有描述使用什麼html代碼」* - 也許不會一個「按鈕」本身,但這個答案在鏈接g iven由VIPIN是足夠接近你修改它是一個按鈕http://stackoverflow.com/a/6235868/1415724 - 這是「HTML 101」的東西。 –

回答

0

最簡單的方法是使用GET方法並向腳本發送請求。這工作,即使沒有花哨的PHP編碼。

簡單鏈接

http://example.com/script.sh?name=value&name2=value2&name3=value3& 

CGI-腳本可以處理經由QUERY_STRING變量的請求。


與SSL和POST相結合,你可以在URL後發送數據,所以你的請求將被保護一點。

HTML的形式

<form action="script.sh" method="POST"> 
<input type="hidden" name="name3" value="value3"> 
<input type="hidden" name="name2" value="value2"> 
<button name="name" value="value">Click me</button> 
</form> 

腳本應該對POST請求反應並讀取用於數據deliverd標準輸入。 首先,最重要的變量是REQUEST_METHOD和QUERY_STRING。

希望這會有所幫助。


下面是一個簡單的JavaScript 變異從CGI請求數據...

var query_string = "name=value&name2=value2&name3=value3&"; 
var request = new XMLHttpRequest(); 
request.open("POST", "script.sh"); 
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
request.addEventListener('load', function(event) { 
    if (request.status >= 200 && request.status < 300) { 
     console.log(request.responseText); 
    } else { 
     console.warn(request.statusText); 
    } 
}); 
request.send(query_string); 

此代碼爲像一個事件。 addEventListener(「click」,functionname);


我也能想象ü要由烏爾自己創造的Bash腳本。如果是這樣你必須考慮很多事情。我儘可能簡單地走你

要對請求做出反應,您需要首先發送內容類型,然後是空行。

echo "Content-Type: text/html" 
echo "" 

有用於CORS很多很多的選擇,但內容類型是最重要的。

下一步將檢查請求。

case "$REQUEST_METHOD" in 
POST) 
    if [ "$CONTENT_TYPE" = "application/x-www-form-urlencoded" ]; then 
     read -n "$CONTENT_LENGTH" QUERY_STRING_POST 
      QUERY_STRING_ENC=$(echo -e $(echo "$QUERY_STRING_POST" | sed 's/+/ /g;s/%\(..\)/\\x\1/g;')) 
    else  
     echo -e "Error\t777\ņReceived header has a bad CONTENT_TYPE.\nThe value has to be application/x-www-form-urlencoded." 
    fi 
;; 
*) 
    echo -e "Error:\t555\nReceived header has wrong REQUEST_METHOD.\nThe value has to be POST only." 
;; 
esac 

此代碼部分檢查valide REQUEST_METHOD並讀取stdin。然後它html-decode query_string通過sed

一些安全問題...

DOMAIN="example.com" 
if [ "$HTTP_CONNECTION" != "keep-alive" ] || [ "$HTTP_HOST" != "$DOMAIN" ] || [ "$SERVER_NAME" != "$DOMAIN" ] || [ "$SERVER_PORT" -ne 443 ]; then 
    echo -e "Error:\t666\nCorrupted connection refused." 
fi 

這檢查了的Valide連接。 所有環境變量都列在http服務器的手冊中。

請注意,像REQUEST_METHOD和QUERY_STRING這樣的環境變量可以直接由shell處理。必須過濾輸入以避免跨站點腳本。過濾出「<> & *?./」以免黑客入侵!

經過這些步驟,你可以把你想要的東西放在標準輸出中。但請記住,每個環境變量和stdin都可能是一個威脅,你需要在處理這些事情之前全部過濾掉。

cat << EOF 
<!DOCTYPE html> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>CGI Test</title> 
</head> 
<body> 
    <h1>Hello World</h1> 
</body> 
</html> 
EOF 

增加:

爲了測試一切按部就班我創造了我envtest.sh和inputtest.sh。 U可以將inputtest.sh複製到/usr/lib/cgi-bin/並使其可執行。

終端

cd /usr/lib/cgi-bin 
chmod +x inputtest.sh 

現在ü可以先學習HTML端。 或JavaScript變體。 或PHP和phyhon ...

inputtest.sh

#!/bin/bash 

exec 2>&1  # every error gets redirected into the html too 


echo "Content-type: text/html" 
echo "" 
echo "<html>" 
echo "<head>" 
echo "<title>Test</title>" 
echo "<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">" 
echo "</head>" 
echo "<body>" 

case "$REQUEST_METHOD" in 
GET) 
    echo "<p>QUERY_STRING: ${QUERY_STRING}</p>" 
;; 
POST) 
    if [ "$CONTENT_TYPE" != "" ]; then 
     read -n "$CONTENT_LENGTH" QUERY_STRING_POST 
     echo "<p>$QUERY_STRING_POST</p>" 
    else 
     echo "<p>Error while REQUEST_METHOD=POST and CONTENT_TYPE=${CONTENT_TYPE}</p>" 
    fi 
;; 
*) 
    echo "<p>Error wrong REQUEST_METHOD: \"${REQUEST_METHOD}\"</p>" 
esac 

echo "</body></html>" 

exit 0 

鏈接看起來像......

http://example.com/cgi-bin/script.sh 
+0

我在幾個小時後檢查了這一點,當我回到我的電腦 – Thomasttw

+0

我添加了一些更多的信息。 – suleiman

+0

所有這些都是褻瀆的,因爲我不太瞭解這一切。順便說一句,我需要的代碼不必爲黑客安全,因爲它永遠不會上網,我也沒有任何域名。我只理解非常基本的東西,因爲html php和javascript對我來說非常新穎 – Thomasttw

0

你需要做的是用程序調用文件。使用bash或sh調用它作爲評論所說:

echo shell_exec('sh /home/scripts/fix-perm.sh'); 

另一種選擇可能是:

$contents = file_get_contents('/home/scripts/fix-perm.sh'); 
echo shell_exec($contents); 

我認爲第一種選擇將是更好不過。

需要注意的是,執行外部程序的所有命令都需要實際的命令而不是文件路徑或其他內容。這適用於shell_exec, exec, passthru等。

+0

但這不是一個按鈕的權利? – Thomasttw

+0

你可以用簡單的形式調用上面的代碼。如果有幫助,請提出答案! –