Chinaunix首页 | 论坛 | 博客
  • 博客访问: 694469
  • 博文数量: 148
  • 博客积分: 4086
  • 博客等级: 上校
  • 技术积分: 1766
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-06 23:27
文章分类

全部博文(148)

文章存档

2013年(19)

2012年(9)

2011年(106)

2009年(14)

分类: LINUX

2011-02-18 16:58:37

http://hi.baidu.com/id_joyride/blog/item/25933ef676a95f2b730eecd3.html
看了用C语言进行CGI程序设计(转载)一文后,进行了一下练习,将练习过程记录下来,以资查询。

一. 过程总结

    总的说来,做cgi的过程大致是:

    1. 安装lighttpd

    2. 写lighttpd的配置文件lighttpd.conf。

      (1)使用语句 server.modules = ("mod_cgi") 加入 cgi 模块;

      (2)使用语句 cgi.assign = (".cgi" => "") 设置 cgi 模块的扩展名和解释器。就本语句而言,表示cgi模块的扩展名是“.cgi”且该 cgi 模块不需要特别的解释器来执行。

    3. 写HTML脚本,在脚本中指定表单数据发送给哪个 cgi 程序处理。

       如“

” 表示表单数据发送给 mult.cgi 处理。同时,可以看到该语句也指定了 mult.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("乘法结果 ");
    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处理后返回给浏览器显示。

阅读(7024) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~