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

    技术2022-05-20  61

    References:

    Apache CGI文档:http://httpd.apache.org/docs/current/howto/cgi.html Apache CGI环境变量:http://httpd.apache.org/docs/current/env.html 利用Shell写CGI:http://www.yolinux.com/TUTORIALS/LinuxTutorialCgiShellScript.html 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)