发信人: tanshuai()
整理人: workingnow(2002-09-30 11:55:44), 站内信件
|
CGI/PERL 的现在与未来
正规文档(WORD)下载地址: http://www.cncenter.com/1560.doc
作者:Sam Tanshuai – 天水·谭帅(于辽宁 公园二零零零年七月四日) TanShu [email protected]
从1997年接触CGI 以后,我就发现我渐渐的喜欢上了它,当时我国还是HTML 的时 代,好的动态网站不多。其中由网易开发的163电子邮局,更让我喜欢CGI。在当 时 CGI 这个名词在中国的网络上出现的频率少之又少,ASP刚刚浮出水面,更听 不到 PHP 这个现在无人不晓的程序语言。就在今年,PHP好像一夜间就侵袭整个 地球。在中国的网站到处可以见到以 点PHP结尾的URL,PHP的贴子,PHP的文章和 程序代码。而你几个月前,还看到某个网站在招聘 CGI/PERL 程序员的时候,今 天却换成了 PHP。一时间我的大脑膨胀的不得了,我不知道我是否应该放弃CGI/ PERL,去学习PHP。我在论坛做了很久的CGI/Perl版主,起初当时还没有听说PHP 这个脚本语言,几个月后出现了PHP版,它以迅雷不及掩耳之势迅速追赶一切的一 切,几乎成了当时的焦点。而批评、蔑视和诋毁CGI/Perl文章的也逐渐多了起来 。写了3年的CGI/Perl程序,今天突然被称为速度慢、耗费系统资源和语言复杂 等种种原因好像变成了程序中的垃圾。因此,我在此的犹豫不决,让我更多的了 解了CGI、ASP 、API和PHP这四种WEB上最常见的语言。
在 CGI 中,有众多语言,包括:C/++、Perl、TCL、Basic等。其中由于Perl的 易编译调试、移植性颇强。几乎成了CGI的标准,或代言词。每每当人们提到CGI 的时候,你必然会想到PERL。前些月人们还在 CGI与 ASP之间的争执,但实事证 明了 ASP 并不是最好的网络语言,它的安全性令人担忧,它的移植性更令人头疼 。面对着抄得沸沸扬扬免费的Linux,你只能感到无奈,只好掏出腰包给微软来换 取新的Windows。PHP和 ASP 一样都是被称为“可嵌入式”的程序脚本语言和强大 的数据处理能力。并大大贬低了CGI/PERL在此的用处。在一篇介绍 PHP 的文章中 这样说:“用Perl/C等写的CGI脚本是一种“非嵌入式”的服务器端脚本,因为它 是一个单独的程序,
而不是嵌在HTML文档中再通过另一个程序解释替换。例如,下面的Perl程序:
print "Content-type:text/html\n\n";
print <<HeadofHTML;
<HTML>
<HEAD>
<TITLE>Hello!</TITLE>
</HEAD>
<BODY>
HeadofHTML
print "<CENTER>aaa</CENTER>";
print "</BODY></HTML>"; “
在这个脚本中,它的确是非嵌入式的,但是我们要了解到是,早在公元1996 年8月份,可嵌入是的CGI脚本程序已经开发成功,它就是ePerl。因为它并不是 CGI/Perl的主要功能,只有国外一些网站在使用,在国内很少会知道。它 PHP 一样有着可嵌入是的功能。一个普通Perl的例子:
print "foo\n";
print "bar\n";
print “HELLO WORLD”;
print "baz \n";
print "quux\n";
采用ePerl 以后:
foo
bar
< ? print “HELLO WORLD”; !>
baz
quux
而PHP:
foo
bar
<? echo “HELLO WORLD”; !>
baz
quux
从上面三个里之中,我们可以看出,Perl和 PHP一样都具有嵌入的功能,当然你 非要说 echo 比 print 少一个字母我也没有办法:)另一个是embPerl,embPer l在和 ePerl很多方面都很相像。它们的主要不同在于ePerl不是HTML专用的,而 embPerl是专门用于HTML的。EmbPerl提供了一些元命令来完成特殊任务,像填充 HTML表等等。用了特殊的方法解释一些HTML标记。但是学习新的语法比较费劲, 不过ePerl它和Perl没有什么区别,如果需要用于一般目的的嵌入Perl 方案,eP erl更佳。而EmbPerl在特殊的时候更为出色。在使用eperl和EmbPerl前必须安装 它们的模块。这里介绍ePerl在Unix类型系统中的安装方法:
首先到: www.engelschall.com/sw/eperl/ 下在相应的ePerl模块,在eperl源目 录下面依次输入:perl Makefile.pl、make、make test、make install。在以S SI形式使用ePerl的时候,这些命令将安装在 Apache::Perl 模块。修改httpd. conf文件 ,
<Location /eperl/>
SetHandler perl-script
PerlHandler Apache::ePerl
</Location>
CGI/Perl的最大致命弱点,即人们说所的速度和系统资源。的确,它在这个方面 有很大不足。我们知道一般 CGI/Perl 每一次启动都要启动一个进程,如果有2 万人同时在一个聊天室里聊天,那么就会产生2万个进程,在强大的中央处理和 在大的内存都很难处理如此之多的进程。但是每一种东西,总是会有最终的解决 方案,要不然微软的HOTMAIL为何至今还用CGI呢? Fast-CGI ,是把原来的CGI 进行优化,即原来2万的用户聊天的时候,只启动一个进程,这样大大节省了系 统资源。比如普通的脚本:
Print “Content-type : text/html\n\n”;
Print “I Love Perl”;
这样的程序,每一次都要启动一个进程。
而使用了FCGI模块以后:
use FCGI;
while(FCGI::accept() >=0 )
{
print "Content-type: text/html\n\n";
print "I Love Perl”;
}
exit 0;
这样每次之需要启动一个CGI进程,大大缓解了过渡占用系统资源的问题。
从CGI转化到FCGI,并不难,只要了解它的基本结构。
<! 此处为图片!!>
如上面的两个例子,只要把Print “Content-type : text/html\n\n”;
Print “I Love Perl”;这两句,套入响应循环代码中就可以了。当然前提是你 要安装了FCGI这个模块,否则就会出现错误。在UNIX类型系统(包括: Linux/Fr eeBSD/SunOs),你可以这样:
下载,到 www.cpan.org 下载FCGI模块,然后 tar zvxf filename.tar.gz,完 成后出现以该文件名命名的目录,进入目录后,依次输入 perl Makefile.pl、m ake、make test,然后开始安装 make install。怎样就完成了。
在Windows中,我用的是Perl 5.2,本来是Perl 5.6,可是怎么也没有安装上去, 我的朋友也是如此。到http://www.activestate.com/ppmpackages/5.005/zips 下载 FCGI模块后,解压缩。启动MS-DOS窗口。提示符下面输入 ppm,然后出现P PM>,输入 install /path/to/filename。就大功告成了。
CGI的另一个好处是加密性强,大家都知道C/C++编译出来最终运行的程序是 二进制的,你无从猜想它的源代码。而Perl是解析性语言,我想大多数程序员有 和我同样的想法,如何把Perl加密从而保护我们的知识结晶。当时最为风行的是 Perl2Exe,很多人用了它,把自己的Perl加密,当你得意洋洋的说你的程序是用 C编写的时候,Exe2Perl的反编译程序已经出世了。然而很多人没有意识到Perl 从 自始至终都提供一个perlcc的程序,可以将目前的Perl 源代码转化成C源代 码并编译,方法很简单 在CMD模式下面输入 perlcc filename.pl 即可!在不 同的操作系统上可以编译出不同的兼容操作系统的二进制可执行的CGI。这个时候 你就可以骄傲的说,你的程序使用C编写的了。在这一点,目前任何程序语言都无 法与其比美(据我所知Java可以被反编译出原始代码)。如果你想把你的商用程 序出售,而又不愿意出售源代码,你最好的选择就是CGI了。
我一直在寻求一个科学的文章,来审视众多语言中那个是最好的。我想有很 多人都是这样。比尔盖茨至今可能还认为世界上最好的语言是 Basic。本我主要 地目的是,让更多的人真正知道 CGI 与其它程序的分别,好与弊。每种程序语言 都有它的好的一面和坏的一面。我们不应该去偏袒某一方,或诋毁某一方。让CG I的程序员们不会被老板骂。当你用FCGI写出来的程序,将会比你以前的程序快得 多。我目前正致力于把我十几个的商用程序进行FCGI的优化,效果的确不错。当 你学习过CGI ASP 和 PHP之后,你会感觉到CGI更加适合于大型程序的编写。曾 经有人这么评论:
小型站台 php (比如GuestBook)
中型大型用 perl+fastcgi(比如 Webmail Business)
巨型用 C/C++语言……
如果您有什么独特见解或疑问,小生愿洗耳恭听,电邮给我 Tanshuai@Bigfoot. com 。
-- CGI版主(BM) —— ☆★天水★☆ №↑1.
☆网络世界,你我共行,创出新意,创出未来,创出新世界!★
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
□E-Mail: [email protected] 【Http://ts.cncenter.com】
〓I Seek You!ICQ UIN : 25856530 (AOL) OICQ ID:66552
'''''''''''''''''''''''''''''''''''''''''''''''''''''
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.137.138.63]
|
|