Apache源代码注释之执行CGI脚本

 

节选自《Apache源代码解析-基于Apache0.6.5》第八章。

网址:http://www.oldapache.org

论坛:http://bbs.oldapache.org

邮箱:tsingien@gmail.com

 


 

8.1 概述

 

    CGI是Apache生成动态交互式页面的一种方式,CGI的全称是Common Gateway Interface,即公共网关接口。

    Apache的cgi-bin目录是存放CGI程序的位置。

    CGI可以用任何语言来编写,这些语言包括C/C++、Fortran、PERL、UNIX Shell等。

    Apache对CGI的处理是通过文件http_script.c完成的。

    本书不会对CGI程序本身进深入说明,有兴趣的读者可以参考相关的书籍。

8.2 背景知识


8.2.1 初识CGI

 

    我们从Apache0.6.5提供的一个实例程序入手,来对CGI程序有一个大概的了解。

    进入到cgi-bin目录,您可以找到date文件,这是一个UNIX Shell脚本,类似于Windows(DOS)中的批处理,通过文本编辑器如vi打开这个文件,可以看到文件内容如下:

#!/bin/sh

DATE=/bin/date

echo Content-type: text/plain

echo

if [ -x $DATE ];  then

    $DATE

else

    echo Cannot find date command on this system.

fi

    下面我们对这个脚本进行简单介绍:

    第一行是注释行,说明执行这个Shell的是/bin/sh。

    第二行是定义变量,意思是DATE变量的值是/bin/date,这个在不同的系统里面可能会不一样,您可以通过which命令来查看date命令的位置:

[devel@RIZI cgi-bin]$ which date

/bin/date

[devel@RIZI cgi-bin]$

    第三行出现了一个echo指令,意思是直接输出后面的内容到客户端浏览器。因为CGI的输出可能是一个HTML页面,也可能是一张图片或一段音乐,所以我们要通过Content-type提示浏览器后继输出内容的类型。

    if和fi是成对出现的,if/else和其它语言中语法一致,then在本例中说明如果if后的条件成立的话要执行下面的语句,而fi说明对应if的结束。

    整个if-fi的意思是,如果给定的命令存在,就输出执行结果到客户端,否则输出提示信息“Cannot find date command on this system”到客户端。

    我们可以通过浏览器来查看输出结果,在我的浏览器里面的输出结果如下图所示:

8.2.2 isindex标签

 

    isindex是HTML语言的一个标签,因为Apache处理CGI部分的源代码中涉及到了针对它的处理,并且很少有针对它的介绍,我们在这里做一个简单的说明,这也是理解源代码中create_argv函数的关键。

    我们可以在cgi-bin目录中的calendar脚本中看到这个标签的使用。在您的浏览器里面调用这个脚本,可以看到输出如下(图片经过处理,剔除了提示内容):

    其中两个分割线及其之间的内容就是一个isindex标签产生的效果,对应的源代码就是<isindex>。该标签单独出现,已经不建议使用。

    您可以在输入框里面输入一个月份加空格加一个年份,如“5 2009”,然后回车,可以看到2009年5月的日历输出:

 

    我们可以从请求的URL里面看到,客户端请求的地址是/cgi-bin/calendar?5+2009。这个URL是一个经过编码处理,其中加号(+)即空格的编码字符。

    Apache针对这个URL的处理调用了create_argv函数,其中参数av0=calendar,args=5+2009。

8.3 代码注释


限于篇幅,注释代码部分请参看本书官网。

 


 

节选自《Apache源代码解析-基于Apache0.6.5》第八章。

网址:http://www.oldapache.org

论坛:http://bbs.oldapache.org

邮箱:tsingien@gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值