CGI
- 格式:doc
- 大小:32.50 KB
- 文档页数:4
CGI程序
CGI全称Common Gateway Interface (共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做CGI 程序。
CGI 程序的输入/输出是使用编程语言的标准输入/标准输出。
1、CGI 程序的通信方式
当有数据从浏览器传到Web 服务器后,该服务器会根据传送的类型(基本有二类:GET/POST),将这些接收到的数据传入QUERY_STRING 或变量中,CGI 程序可以通过标准输入,在程序中接收这些数据。
当要向浏览器发送信息时,只要向Web 服务器发送特定的文件头信息,即可通过标准输出将信息发往Web 服务器,Web 服务器处理完这些由CGI 程序发来的信息后就会将这些信息发送给浏览器。
这样就是CGI 程序的通信方式了。
2、接收数据
用GET 方式接收到的数据保存在Web 服务器的QUERY_STRING 变量里,而通过POST 方式接收到的数据是保存在这个Web 服务器变量里。
它们的唯一区别就是:以GET 方式接收的数据是有长度限制,而用POST 方式接收的数据是没有长度限制的。
并且,以GET 方式发送数据,可以通过URL 的形式来发送,但POST方式发送的数据必须要通过Form 才到发送。
3.标准输出
CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。
传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出
Cgi简单程序分析:
#include <stdio.h>
#include <stddef.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdlib.h>
#include <iconv.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void)
{
char name[50]="\0";
DIR *dp;
struct dirent *ep;
struct stat st;
printf("%s%c%c\n","Content-Type:text/html;charset=utf-8",13,10); //这一行告诉浏览器如何处理接受到的内容
printf("<TITLE>历史照片</TITLE>\n");//HTML标题
printf("<table align=\"center\" border=\"1\" bordercolor=\"#000000\"
cellspacing=\"4\">");//表示照片居中放置,边框为1,取默认颜色为背景颜色,间距为4
dp=opendir("../../picture/");//打开存储图片的目录
chdir("../../picture/");//进入存储图片的目录
if(dp!=NULL)//判断目录是否为空
{
while(ep=readdir(dp))//读取目录不为空
{
if(ep->d_name[0]!='.')//判断文件是否是隐藏文件
{
{
{
printf("<tr><td>");//tr表示换行,td表示表格,与</tr>,</td>成对出现
printf("%s ",ep->d_name);//打印文件名称
printf("</td>");
printf("<td>");
printf("<img align=\"middle\" src=\"../../picture/%s\"
width=\"640\" height=\"480\" />",ep->d_name);//网页文件居中放置,大小640*480及文件名称
printf("</td></tr>");//结束
}
}
}
}
}
printf("</table>");//整个表格结束标志
printf("<meta http-equiv=\"refresh\" content=\"5\">");//5秒后自动跳回主界面}
由于C语言在平台无关性上表现不错(几乎在任何的系统平台下都有其相应编译器),因此,C是CGI编程的首选语言之一。
这儿我们介绍的,就是如何使用C来编写CGI程序。
标准输出的内容就是要被显示在浏览器中的内容:
printf("%s%c%c\n","Content-Type:text/html;charset=utf-8",13,10);
的输出内容是必须的,也是一个CGI程序所特有的,这个输出是作为HTML的文件头。
这一行告诉浏览器如何处理接受到的内容。
其他的就没有什么了,和一般的C程序没有区别。