利用shell或其他脚本语言在Apache下写CGI

References:

  1. Apache CGI文档:http://httpd.apache.org/docs/current/howto/cgi.html
  2. Apache CGI环境变量:http://httpd.apache.org/docs/current/env.html
  3. 利用Shell写CGI:http://www.yolinux.com/TUTORIALS/LinuxTutorialCgiShellScript.html
  4. Python CGI文档:http://webpython.codepoint.net/cgi_unique_field_names

本文从最基本的流程来介绍一下如何配置Apache使其支持CGI,并用Bash和Python写一个Hello World的动态CGI程序。以下的Apache配置以红帽系的Linux为准。

 

配置Apache

首先需要确认Apache里面的CGI模块已经被载入,一般在/etc/httpd/conf/httpd.conf里面的会有下面这句话:

 

LoadModule cgi_module modules/mod_cgi.so

 

然后在httpd.conf里面(一般是最后)加入下面这句话:

 

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

 

上面这句的意思就将URI后面的路径/cgi-bin/对应到服务器上的/var/www/cgi-bin/目录。比如说服务器的地址是www.example.org的话,那么www.example.org/cgi-bin/hello.cgi就会对应到/var/www/cgi-bin/hello.cgi。

 

编写Hello World CGI脚本

接下来我们在/var/www/cgi-bin/目录里面创建一个hello.cgi文件,这个文件我们用Bash来写。在里面输入下面的内容:

#! /bin/bash


echo Content-type: text/html

echo ""

echo Hello, World.

然后修改文件的执行权限使得Apache进程能够执行这个文件。一般用chmod +x hello.cgi就可以。

然后用浏览器打开http://www.example.org/cgi-bin/hello.cgi就可以看到浏览器上面正常的显示Hello, World.了。

注意到上面的输出的第一行必须是输出“Content-type: text/html“否则Apache识别不了这个文本页面的输出。

 

如果使用Python的话,可以创建一个hello.py文件,输入下面的内容:

#! /usr/bin/python


print("Content-type: text/html/n/n")

print("Hello, World.")

获取脚本的环境变量

一般情况下,我们编写CGI的目的都是动态的处理客户端的请求,而不是显示静态内容。这个时候我们可以通过环境变量来获取相关的值。下面主要是介绍获取通过GET来传递的值。
首先编写如下shell cgi脚本:

#! /bin/bash


echo Content-type: text/html

echo ""

/usr/bin/env  #注意这里设置成env命令的绝对路径,可以通过whereis env来获取

然后在浏览器请求这个cgi就可以看到相关的环境变量。我们也可以看到GET的参数是通过$QUERY_STRING来获取的。

所以在shell的cgi里面,我们就可以通过$QUERY_STRING来获取GET参数。

 

而在Python里面,则可以通过form的getfirst()函数来获取,具体可以看下面的例子:

#! /usr/bin/python


import cgi    # 导入cgi模块


form = cgi.FieldStorage()  # 获取form对象
var1 = form.getfirst('var1', 'empty')  # form对象已经封装了GET和POST方式的请求,所以两种的参数都可以获取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值