用 c 写 CGI 程序简要指南
文章摘要:
9 \: ^; N9 B3 D3 A9 E CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。 我爱电脑技术论坛3 Z1 ]0 F' k2 K0 k
但是用C语言编写的CGI程序具有执行速度快、安全性高等特点。本文详细分析了用C语言进行CGI程序设计的方法、过程和技巧。
0 b6 c6 I: Y. t7 l% L电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
l( m; W5 p3 r; m7 b6 U正文: 用C语言进行CGI程序设计 % Q p8 a# v8 B
我爱电脑技术社区--打造最好的电脑技术自学交流平台" k# ^4 C' ?$ F' o- {3 D, X1 P( A& _ R. k
一、CGI概述 打造最好的电脑自学交流论坛5 _7 c% x8 M! r3 s+ l* G9 B( _
& K/ M' w% \' O, T3 u6 j& Z* W0 I我爱电脑技术社区--打造最好的电脑技术自学交流平台 CGI(Common Gateway Interface: 公用网关接口)规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。 我爱电脑技术论坛8 \2 W7 }1 ~! m# Y
www.520diannao.com g, X! ^ h! M2 k
CGI接口标准包括标准输入、环境变量、标准输出三部分。
5 v/ M6 _- u8 F# Z, R电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 1.标准输入
5 V4 G$ N( Q/ V! w1 S% H1 e( q/ G2 wwww.520diannao.com CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。POST方法是常用的方法,本文将以此方法为例,分析CGI程序设计的方法、过程和技巧。
* U! O5 ~# |+ m; }& i
) s, A0 a( A. Z+ D9 A电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 2.环境变量 打造最好的电脑自学交流论坛( A N \8 |; x
操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI程序传递一些重要的参数。CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。
! V: l- ]4 a, a" t; E( M& gwww.520diannao.com
% I9 D4 j0 z; n" K 3.标准输出 , L% S; P+ ~! ?7 Z4 h: _
CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者Html文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。
6 z/ V$ M" t: o) }; k电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站www.520diannao.com D8 Q8 B+ M/ @2 z
下面是一个简单的CGI程序,它将HTML中Form的信息直接输出到We b浏览器。
6 ^. w$ h" F4 Y) F) Mwww.520diannao.com
8 W* k" H# X0 O) s # include
7 E; |. ~& `, u" N! X% H我爱电脑技术社区--打造最好的电脑技术自学交流平台 # include 5 b( N o2 `4 D$ f( d$ I
main()
( z& H* J2 \. J0 z9 P4 H; @+ q$ Q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 {
! m( l4 N8 Q& ] j( N打造最好的电脑自学交流论坛 int i , n ;
t; K0 \, ^+ |/ h5 s; ~( \' [/ cwww.520diannao.com printf (″Content type: text/plain″); www.520diannao.com" |( P! V `/ N. x- h6 _
n=0; 打造最好的电脑自学交流论坛) L. b' P# Z' e, `3 L) m4 r
if(getenv(″CONTENT-LENGTH″))
1 [' B$ h5 _3 _ ?6 Z2 C% f我爱电脑技术社区--打造最好的电脑技术自学交流平台 n=atoi(getenv(CONTENT-LENGTH″)); www.520diannao.com' p$ `1 Z' y8 ]# Q" {. K5 _
for (i=0;i putchar(getchar()); 打造最好的电脑自学交流论坛( G9 ^1 q7 `7 C
putchar (′′); : u/ ~6 i) {7 H4 b$ c
fflush(stdout);
& I2 x% v4 }0 s# V电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 }www.520diannao.com' y6 L0 t0 ^$ Q4 i6 T l& d
" v) d, V7 Q% [7 }: y e( q我爱电脑技术社区--打造最好的电脑技术自学交流平台
: I2 O: g2 ^. ?. C0 V我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术论坛3 a2 Q6 P8 J2 }" x
下面对此程序作一下简要的分析。
0 V" Q$ m* w. e5 g" S$ G4 ^ H% I
' s, q/ e' y9 y( K0 y' [* P我爱电脑技术社区--打造最好的电脑技术自学交流平台 prinft (″Content type :text/plain″);
+ O3 D1 u9 B, m, V2 T, u ~; Jwww.520diannao.com
m/ a7 ?$ q9 k4 A打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 q9 U% I- n6 M4 L7 P; n2 V2 R( ^% K
此行通过标准输出将字符串″Content type :text/plain″传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随后的输出是以纯ASCII文本的形式。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。 www.520diannao.com; y3 z( g. W- \# O! ^
2 U2 O8 n$ X j: n, i打造最好的电脑自学交流论坛 if (getenv(″CONTENT-LENGTH″))
. f! ~2 Z* w4 u5 z我爱电脑技术社区--打造最好的电脑技术自学交流平台 n=atoi (getenv(″CONTENT-LENGTH″));5 c7 p3 \6 Y+ ^7 j
我爱电脑技术社区--打造最好的电脑技术自学交流平台) L7 r- ?$ B9 L# K
我爱电脑技术论坛. O" b T/ N* q2 d% |
此行首先检查环境变量CONTENT-LENGTH是否存在。Web服务器在调用使用POST方法的CGI程序时设置此环境变量,它的文本值表示Web服务器传送给CGI程序的输入中的字符数目,因此我们使用函数atoi() 将此环境变量的值转换成整数,并赋给变量n。请注意Web服务器并不以文件结束符来终止它的输出,所以如果不检查环境变量CONTENT-LENGTH,CGI程序就无法知道什么时候输入结束了。
+ E! K5 a& a) Z# N6 \' q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
; |3 z+ p1 J9 g) S( |8 d打造最好的电脑自学交流论坛 for (i=0;i putchar(getchar());
6 |+ B o4 ] O& p# n4 }; Gwww.520diannao.com
2 x+ c0 r# Q: B打造最好的电脑自学交流论坛www.520diannao.com- F C9 F# `0 g% j7 z
此行从0循环到(CONTENT-LENGTH-1)次将标准输入中读到的每一个字符直接拷贝到标准输出,也就是将所有的输入以ASCII的形式回送给Web服务器。