在运行lighttpd的raspi服务器上远程编译C程序:使用用户路径运行

在运行lighttpd的raspi服务器上远程编译C程序:使用用户路径运行,c,compiler-errors,lighttpd,suexec,C,Compiler Errors,Lighttpd,Suexec,我一直在运行debian 7.6的raspberry pi服务器上开发一个非常基本的gcc web前端。最终的结果是,您可以编译一个文件C程序,将其输入Pi提供的HTML表单中,它通过ajax将C代码发布到服务器,服务器上的bash cgi脚本解码HTML,将文件写入main.C之类的内容,然后进行编译。作为用户,您可以获得编译的结果,或者是错误,或者是编译成功的消息。到目前为止就是这样 我在尝试远程编译文件时遇到此错误: Error: gcc: error trying to exec 'cc

我一直在运行debian 7.6的raspberry pi服务器上开发一个非常基本的gcc web前端。最终的结果是,您可以编译一个文件C程序,将其输入Pi提供的HTML表单中,它通过ajax将C代码发布到服务器,服务器上的bash cgi脚本解码HTML,将文件写入main.C之类的内容,然后进行编译。作为用户,您可以获得编译的结果,或者是错误,或者是编译成功的消息。到目前为止就是这样

我在尝试远程编译文件时遇到此错误:

Error: gcc: error trying to exec 'cc1': execvp: No such file or directory
当我通过stdin将同一个c文件的文本手动发送到cgi时,我没有收到此警告,这是在远程方法中检索post数据的方式,因此我假设它与服务器路径以及服务器作为谁运行脚本有关,我认为这是www数据,在本例中,我的lighttpd.conf文件将“www数据”作为服务器用户名和组名。在cgi脚本中运行/usr/bin/env时,路径不包括返回的cc1的位置

我的解决方案是将gcc使用的cc1实用程序的位置放在cgi脚本本身中:

PATH=$PATH:/usr/lib/gcc/arm-linux-gnueabihf/4.6
export PATH
这是可行的,但我确信我在这里所做的不是正确的方法,在面向公众的环境下这是不够的。我的问题是:

允许远程用户使用适当的路径运行cgi脚本的更好方法是什么?例如,我不必将不在www数据用户路径中的二进制文件的路径放在文件中


我对web服务器管理和管理cgi脚本非常陌生:我不知道我不知道什么。

$path用于包含可执行文件的目录。您直接指向一个可执行文件,这意味着shell将尝试查看/usr/lib/../cc1/cc1是否存在良好的捕获。我将编辑cgi和我的帖子以反映这一点。@MarcB:是$PATH,不是$PATH。