分类: LINUX
2011-02-18 16:58:37
一. 过程总结
总的说来,做cgi的过程大致是:
1. 安装lighttpd
2. 写lighttpd的配置文件lighttpd.conf。
(1)使用语句 server.modules = ("mod_cgi") 加入 cgi 模块;
(2)使用语句 cgi.assign = (".cgi" => "") 设置 cgi 模块的扩展名和解释器。就本语句而言,表示cgi模块的扩展名是“.cgi”且该 cgi 模块不需要特别的解释器来执行。
3. 写HTML脚本,在脚本中指定表单数据发送给哪个 cgi 程序处理。
如“
4. 写 cgi 的C源代码并编译(注意编译好的代码要放到表单指定的位置去,如第3步所述。)
该cgi程序接收第3步中的表单数据并处理。
(1)不同的表单提交方式(get或post)传送到cgi程序的数据格式是不同的,所以要根据表单提交方式来写cgi中解析表单数据的代码。
(2)解析好表单数据后,按实际需要写数据处理代码。
(3)数据处理完毕后,写输出代码。用 printf 按 HTML 语法格式输出结果给浏览器显示。
5. 测试
二. 具体操作过程记录
环境
编译主机的系统版本:linux 2.6.27.5-117(fedoral 10)
编译工具链:GCC4.3.2
lighttpd 的版本为 2.4.19
过程
1. 安装lighttpd
参考“在Ubuntu9.04上从源码安装lighttpd【by joyride】”
2. 修改配置文件lighttpd.conf(假设放在var.DocRoot(/home/usr948/lighttpd-1.4.19/web)下)
# --- define variables (begin) ---
var.DocRoot = "/home/usr948/lighttpd-1.4.19/web"
var.HostWebPage = "index.html"
var.HttpPort = 1111
# --- define variables (end) ---
# --- set enviroment (begin) ---
server.document-root = var.DocRoot
server.port = var.HttpPort
server.indexfiles = (var.HostWebPage)
mimetype.assign = (".html" => "text/html")
# --- set enviroment (end) ---
# --- add modules (begin) ---
server.modules = ("mod_cgi")
# Add the cgi module
cgi.assign = (".cgi" => "")
# ".cgi" - appoint suffix of cgi program;
# "" - tell lighttpd that the cgi program need not a particular explain program.
# --- add modules (end) ---
3. 修改目录下的启动页面index.html(假设放在var.DocRoot(/home/usr948/lighttpd-1.4.19/web)下)
计算两个数的乘积,请输入两个乘数。
蓝色语句表示form提交的数据被发送给mult.cgi程序处理。注 意:给出的cgi程序的位置是相对目录而不是绝对目录,相对目录的根节点由配置文件lighttpd.conf中的server.document- root = var.DocRoot语句给出,所以,最终编译好的cgi程序应该放在目录 /home/usr948/lighttpd-1.4.19/web/cgi-bin 下。
4. 写cgi源代码(假设文件名为mult.c)
#include
#include
int main(void)
{
char *data;
long m,n;
printf("%s\n\n","Content-Type:text/html;charset=gb2312");
printf("
data = getenv("QUERY_STRING"); //获得form传来的参数——两个乘数m和n
if(data == NULL)
printf("
错误!数据没有被输入或者数据传输有问题");
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
printf("
错误!输入数据非法。表单中输入的必须是数字。");
else
printf("
%ld和%ld的乘积是:%ld。",m,n,m*n);
return 0;
}
5. 编译源代码
gcc mult.c -o mult.cgi
根据4.的说明,必须将编译好的mult.cgi放到 /home/usr948/lighttpd-1.4.19/web/cgi-bin 目录下。
6. 启动lighttpd
设置当前目录到 /home/usr948/lighttpd-1.4.19/usr/sbin。
cd /home/usr948/lighttpd-1.4.19/usr/sbin
执行下面命令:
./Lighttpd -f ../../web/lighttpd.conf
7. 在浏览器输入 ,回车可看到起始页index.html 。
8. 输入两个乘数(如4和6),点击“Submit Query” 按钮,form的数据将被提交到cgi处理后返回给浏览器显示。