2017-03-05 142 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

你可以用简单的形式调用上面的代码。如果有帮助,请提出答案! –