我是新來的編程在HTML/PHP/JavaScript,所以我不知道如何開始。用html按鈕執行sh文件點擊
我想在網頁上執行一個.sh文件(在Linux上)與一個按鈕(所以HTML我猜)。
我讀過,我不得不在html上製作一個按鈕,但把執行代碼放在php中,但我似乎無法將代碼製作出來。
幫助將不勝感激
這不是重複的,我說我是新的,我不知道如何使用按鈕做到這一點,這就是它是一個不同勢的問題。
我是新來的編程在HTML/PHP/JavaScript,所以我不知道如何開始。用html按鈕執行sh文件點擊
我想在網頁上執行一個.sh文件(在Linux上)與一個按鈕(所以HTML我猜)。
我讀過,我不得不在html上製作一個按鈕,但把執行代碼放在php中,但我似乎無法將代碼製作出來。
幫助將不勝感激
這不是重複的,我說我是新的,我不知道如何使用按鈕做到這一點,這就是它是一個不同勢的問題。
最簡單的方法是使用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
你需要做的是用程序調用文件。使用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
等。
但這不是一個按鈕的權利? – Thomasttw
你可以用簡單的形式調用上面的代碼。如果有幫助,請提出答案! –
檢查此鏈接 - http://stackoverflow.com/問題/ 6235785/run-a-shell-script-with-a-html-button –
這篇文章沒有描述使用什麼html代碼 – Thomasttw
*「這篇文章沒有描述使用什麼html代碼」* - 也許不會一個「按鈕」本身,但這個答案在鏈接g iven由VIPIN是足夠接近你修改它是一個按鈕http://stackoverflow.com/a/6235868/1415724 - 這是「HTML 101」的東西。 –