CGI(Common Gateway Interface通用网关接口),物理意义上是运行在Web服务器上的一段程序,由Server端调用以实现同客户段 Html页面的信息交互,它是由来自于浏览者的输人触发的。例如,当你在使用浏览器打开你朋友空间并给其留言时,你需要先在留言框内输入一些文字或图片等信息,填写完毕后,要提交留言你就必须按一下“留言”按键,好了,到目前为止,你的所有信息都停留在客户端上,而当你按下“留言”按钮时,浏览器才把这些消息传送给服务器端向服务器触发一个请求,服务器收到该请求后把传递过来的数据按一定的格式编码后传递给特定目录(一般为cgi-bin/)下的CGI程序,然后CGI程序就在在服务器上按照预定的方法进行处理由server送达的数据了。
我是在MIPS +Goahead服务器上完成的,但由于Goahead服务器是设备中一个小应用,每次修改后都要涉及内核的编译工作,所以为方便调试,我先在Ubuntu+Apache上进行调试程序代码,再把功能OK的代码移植到设备上编译调试。下面是我在Ubuntu12.04+Apache2上搭建的CGI环境。
第一步:安装apache
zqj@ubuntu:~$sudoapt-get install apache2
zqj@ubuntu:~$sudo/etc/init.d/apache2 restart
第二步:配置apache支持cgi:
zqj@ubuntu:~$sudogedit /etc/apache2/sites-available/default
修改代码块:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
为:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
第三步:测试环境:
一个简单的cgi程序:
/*
**hello.c
*/
#include <stdio.h>
int main(void)
{
printf("Contect-type:text/html\n\n");
printf("Hello World!\n");
return 0;
}
说明:
第一句printf() 是打印的是HTTP通讯协议规定的请求和响应消息,本例子中指定了 text/html 类型,表示传输的是一个html 文档,还有图片、音频、视频、流等类型。
第二句printf() 打印的内容就会像我们写网页内容一样显示在浏览器上。
编译运行程序:
zqj@ubuntu:~$gcc hello.c –o hello.cgi –Wall
zqj@ubuntu:~$cd /var/www
zqj@ubuntu:~$sudo mkdir cgi-bin
zqj@ubuntu:~$sudo mv /home/xhy/hello.cgi/var/www/cgi-bin