ubuntu,debian,redhat,fedora,centos
« »

apache CGI程序的简单配置与使用

添加虚拟主机

<virtualhost 127.0.0.1:50001>
</virtualhost>

这里新添加了50001端口来进行监听,所以还需要添加监听端口号

Listen 50001要让程序能正常运行,还得通过配置ScriptAlias来允许服务器在指定的情况下,以CGI方式运行。

<virtualhost 127.0.0.1:50001>
ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
</virtualhost>

所以上述的配置会告诉apache,所以以/cgi-bin/开头的资源都会被映射到/usr/local/apache/cgi-bin/目录下,并被认为是cgi程序。然后重启服务器

在apache/cgi-bin/目录里有一些测试例子,我们可能用它来测试下,看看配置是否能正常运行。
比如说apache/cgi-bin/目录下有个test-cgi程序,源码如下:

#!/bin/sh
 
# This article come from linxuany.com
set -f
 
echo "Content-type: text/plain; charset=iso-8859-1"
echo
 
echo CGI/1.0 test script report:
echo
 
echo argc is $#. argv is "$*".
echo
 
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT"
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH

然后在浏览器里输入

http://127.0.0.1/cgi-bin/test-cgi

如果设置正确就能显示如下信息

CGI/1.0 test script report:
 
argc is 0. argv is .
 
SERVER_SOFTWARE = Apache/2.2.10 (Unix) PHP/5.2.8
SERVER_NAME = 127.0.0.1
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 50001
REQUEST_METHOD = GET
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING =
REMOTE_HOST =
REMOTE_ADDR = 127.0.0.1
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

当然你也可以选择用其它语言来写一个cgi程序。

现在我们用C语言写一个简单的例子。

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main (int argc, char** argv) {
  4.     char a[] = "-100";
  5.     char b[] = "456";
  6.     int c;
  7.     c = atoi(a) + atoi(b);
  8.     char *p;
  9.     p = getenv("QUERY_STRING");
  10.     printf("Content-type: text/html\n\n");
  11.     printf("c=%d",c);
  12.     printf("%s",p);
  13.     return 0;
  14. }

实现功能为:打印打印a+b的值,如果有get参数,同时打印get参数
编译

www@linuxany.com:/usr/local/apache/cgi-bin$ gcc test.c -o test
这时我们可以通过

http://127.0.0.1:50001/test

如果通过

http://127.0.0.1:50001/test?name=linuxany

我们的程序就会打印name=linuxany这个查询参数。

您还可能感兴趣的内容

日志信息 »

该日志于2010-05-26 20:19由 admin 发表在Apache分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

没有评论

发表评论 »

返回顶部