-$-$--外包工--$-$-

  PHP博客 :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  22 随笔 :: 0 文章 :: 2 评论 :: 0 Trackbacks

作者 :王骜骋

什么是CGI?
    最早的网页都是静态的,好在有了CGI(通用网关接口)的帮助下,网站个个都变的活灵活现,像目前网站上在用的留言本,论坛,聊天室等东西很多都用CGI来完成的。CGI只是一种接口,并不是一种编程的语言,但是CGI几乎可以接受所有的编程语言去编写它,比如C/C++、VB、SHELL等等,但是其中最流行的是PERL(骆驼) ,PERL的文字处理功能非常强大,作者开发它的目的最先也是为了处理文字报表等信息,它是一种解释性的语言,操作平台的可移植性、兼容性也很强,比如WINDOWS、*NUX、OS/2、VMS等等 ,使用这种语言编写程序需要在操作系统上安装PERL的解释器,要执行脚本的话,PERL解释器会被调用,然后一行一行的做解析(关于PERL的安装、调试请参考相关网站或书籍,这里不多说)。

什么是FastCGI?
    时代在进步,技术在更新!我们的网站越做越大,后台使用的数据库规模也逐渐增加,系统资源和网络开销成为了难题,如果再购买硬件设施(比如专业的应用程序服务器),这会投入一笔不小的资金,但是如果不及时解决,遇到了突法性的网络事件又会经常当机,这会给网站带来巨大的无形损失。
    PERL虽然说是一种方便、快速的东西,但是遇到今天的大型网络,也有点吃不消了,因为CGI的程序每次执行时都要花费时间去复制一个新的进程,这会占用过多的资源。
    就因为这样一种叫FastCGI的东西横空出世了,FastCGI是一个内存常驻(long-live)型的CGI,它利用内存高速的原理,在编程中进行循环结构把程序寄放在内存中,只要启动后,它可以一直执行着,从而大量提高程序的运行速度,和CPU、内存的占用时间,这里大家可以想想内存读取和硬盘读取的速度差异所在。这样而来系统就会更快的返回用户的请求,也就是说可以同时拥有更大的并发能力,接受更多的用户。

如何在WIN2K上进行安装?
    以前讨论*NUX上安装FastCGI的文章比较多,我这里就不再介绍了。我们今天来看看怎么在WIN2K上安装它。目前我使用的WIN2K是Server(服务器)版和APACHE WEB SERVER。
    我们采取一种简便的方式在APACHE上安装FastCGI,这里我们不需要进行编译,直接使用编译好的DLL文件,文件下载的地方请看文章尾部(下载一)。
    DOWN下来后,把这个文件复制到x:\Apache\modules(x:代表你安装APACHE的盘符),下一步是配置APACHE的
    CONFIG文件以加载FastCGI模块,用文本打开x:\Apache\conf\httpd.conf,在其中加入以下两行:
    LoadModule fastcgi_module modules/mod_fastcgi.dll
    AddHandler fastcgi-script .fcgi .fpl
    以上第一行是说,在APACHE启动的时候自动载入mod_fastcgi.dll模块,第二行是说FastCGI的文件识别名称,
    好让系统知道哪些是FastCGI脚本,应该怎么去打开它(这里我们定义了两个文件后缀fcgi和fpl,当然你也可 以自己增加其他后缀)。就这样最简单的APACHE FastCGI配置就已经完成了。

完成您的第一个FastCGI程序!
    用PERL写FastCGI是最方便不过了,有的只需要增加(修改)几行代码即可完成。下面我们来完成第一个FastCGI 程序。
    现在大部分都使用ActivePerl的PERL解释器,如果你还没有,请下载一个吧(下载二),FastCGI在PERL中 的实现我们采用一个名称叫FCGI的软件包(下载三),这个包中提供了一些基本的FastCGI函数,下面来进行安装 这个包,把FCGI.zip解压到任意目录,进入该目录后使用以下命令进行安装:
ppm install FCGI.ppd
    如果无以外就说明该软件包已经成功安装在你的系统中,然后该轮到写程序的时候了,我们这里写一个最简单的 计数器程序,程序代码如下:

#!perl 
####################### 
# FastCGI 计数器演示 
# 作者 :王骜骋 
####################### 

use FCGI; # 使用FCGI模块 
my $count = 0# 初始化变量$count为值0 
while (FCGI::accept() >= 0) { # 让程序进入循环状态 
# FCGI::accept 是FCGI包中的函数 
# 用来接受一个连接,如果连接成功则返回0 

print "Content-Type:text/html\n\n";# 申明内容类型为HTML 
print "你是第"
print $count++;# 输入计数器的值并增加1 
print "位访问者"
}

把以上程序拷贝到一个后缀为fcgi或fpl的文件中,然后在浏览器中执行它即可。
这时你按刷新就能看到计数器的值在不断的向上增加,通过这个原理,我们可以做出更多更好的程序,下面我们介绍一下留言本的编写技巧和原理。

FastCGI的编程技巧!
    以上的程序只是一个简单的计数器,如果真正投放到应用中,我们也不能只写计数器呀。
    下面我们来谈谈FastCGI编 些留言本的一些使用技巧,编写留言本不像计数器只增加数字就可以了,留言本有很多字段,最简单的也要包含姓名 和内容,这样一来,访问时候就会带有很多参数值,FastCGI在获取这些参数值的时候和一般的PERL程序不一样,因 为FastCGI程序一直在内存中工作,
如果使用一般的参数读取方法,很容易产生混淆,以导致程序无法正常工作。
所以 我们使用另外一个模块CGI中的子集Fast(备注:CGI是一个相当出名的模块,其中包含的函数相当丰富,比如上传、获 取表单、浏览器COOKIE值、Server Push等等),下面来看看留言本的编写过程:

#!perl 
####################### 
# FastCGI 留言本演示 
# 文件名称:guest.fcgi 
# 作者 :王骜骋 
####################### 

use CGI::Fast qw(:standard);# 使用CGI模块的FastCGI子集 
my $data_file = "data.txt";# 指定数据库文件名称 
while (my $cgi = new CGI::Fast) { 
print "Content-Type:text/html\n\n"
my ($rw);# 本地变量申明 
$rw = $cgi->param("rw");# 读取表单值,判断是读取还是写入 
if ($rw eq "r" || $rw eq "") { 
print qq~ 
<form name="" action="guest.fcgi" > 
<p>姓名: 
<input type="text" name="name"> 
</p> 
<p>留言: 
<textarea name="content" wrap="VIRTUAL"></textarea> 
</p> 
<p> 
<input type="submit" value="确定"> 
<input type="reset" value="清除"> 
<input type="hidden" name="rw" value="w"> 
</p> 
</form> 
~
my @line = &Read_Data;# 获取数据库 
foreach (@line) {# 输出留言内容 
my ($name,$content= split(/&&/,$_); 
print qq~ 
姓名:
$name 
<br> 
内容:
$content 
<hr> 
~

else { 
my $name = $cgi->param("name"); 
my $content = $cgi->param("content"); 
local $ok = 1
if ($name eq "" || $content eq "") { 
&Print_Erro("请填写完所有的内容!"); 

if ($ok) { 
&Write_Data($name,$content); 
&Print_Succ("留言成功!"); 



sub Read_Data {# 函数功能:读取数据库 
open (FILE,$data_file); 
my @line = <FILE> 
close (FILE); 
return @line

sub Write_Data {# 函数功能:写入数据库 
my ($name,$content= @_
open (FILE,">>$data_file"); 
print FILE "$name&&$content\n"
close (FILE); 

sub Print_Succ {# 函数功能:输入成功页面 
print qq~@_<a href="java script:history.go(-1);">点击这里查看</a>~

sub Print_Erro {# 函数功能:输入错误页面 
$ok = 0
print qq~@_<a href="java script:history.go(-1);">点击这里返回</a>~


作者结束语:试用了以上的程序有何感想?是不是速度飞快?
该文章是作者使用FastCGI后的一些经验和感想,如果文章中出现语法错误或系统错误,请大家不吝赐教
下载一:http://www.fastcgi.com/dist/mod_fastcgi.dll
下载二:http://www.activestate.com/
下载三:http://www.activestate.com/PPMPacka...s-only/FCGI.zip

posted on 2007-12-13 17:08 temptation 阅读(333) 评论(0)  编辑 收藏 引用 网摘

只有注册用户登录后才能发表评论。
网站导航: