我正在尝试将我的R代码实现为Web应用程序。我发现我们可以在apache中执行上面的CGI脚本。我在我的Ubuntu系统中安装了apache2
,然后使用sudo a2enmod cgi
启用了CGI并重新启动了apache服务器sudo service apache2 restart
。
之后我创建了一个shell脚本index.sh
使其成为可执行文件chmod 755 index.sh
并将脚本移动到cgi-bin文件夹sudo mv index.sh /usr/lib/cgi-bin/
index.sh
#!/usr/bin/Rscript
cat("Content-type: text/html\n\n")
cat("<html>")
cat("<body>")
cat("<p><em>Hello</em>, world!</p>")
v <- round(runif(10)*100, 0)
cat("<p>", v, "</p>")
cat("</body>")
cat("</html>")
然后访问了http://localhost/cgi-bin/index.sh并给出了成功的结果
你好,世界!
53 90 25 67 2 29 48 28 91 49
但是我不想在脚本中传递varibles,而是要求用户(作为文本框提交)输入随机数生成的变量
像这样的事情
Range=user defined integer from textbox
Length=user defined integer from textbox
v <- round(runif(Length)*Range, 0)
我该怎么做?
编辑1
我到处寻找解决这个问题的方法,但到目前为止,我可以获得服务器环境变量。
#!/usr/bin/Rscript
cat("Content-type: text/html\n\n")
cat("<html>")
cat("<body>")
cat("<p><em>Hello</em>, world!</p>")
cat("<form action='http://localhost/cgi-bin/index.sh' method='POST'>
Range:<br>
<input type='number' name='range' value='100'>
<br>
Length:<br>
<input type='number' name='length' value='10'>
<br><br>
<input type='submit' value='Submit'>
</form>")
cat(Sys.getenv("REQUEST_METHOD"))
if(Sys.getenv("REQUEST_METHOD")=="POST")
{
v <- round(runif(10)*100, 0) # sample ten random integers from {0..10}
cat("<p>", v, "</p>")
}
cat("</body>")
cat("</html>")
但是当我提交结果时是纯垃圾
<ÍNÃ0‘I}Šáäà|QÓ|r|怢¼€¸±%YDE†ªo’¢SN;Ú™“æ-,-B§î* A ...òÅxŸÏ×#。iô݃àùsJc€jÉ¥Ø0K48÷©UÞ|3ñ¶wOÚE~1ú9ßÁM]ÃÞߎŸL®€{szœ...pq~tLÃâ'¢ Y³áKù)«b½^Ò¹W{²ÿhñ<ñWͽå¯ìyÒÁÑÝ}¼I¹|?1 -C v5¶{”êûÕE...zƒ] ...bƒ...¿“AOO]