CGI/PERL的現在與未來
從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";
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 "foon";
print "barn";
print “HELLO WORLD”;
print "baz n";
print "quuxn";
采用ePerl 以后:
foo
bar
< ? print “HELLO WORLD”; !>
baz
quux
而PHP:
foo
bar
<? echo “HELLO WORLD”; !>
baz
quux
從上面三個里之中,我們可以看出,Perl和PHP一樣都具有嵌入的功能,
當然你非要說echo比print少一個字母我也沒有辦法:)另一個是embPerl,
embPerl在和ePerl很多方面都很相像。它們的主要不同在于ePerl不是HTML
專用的,而embPerl是專門用于HTML的。EmbPerl提供了一些元命令來完成
特殊任務,像填充HTML表等等。用了特殊的方法解釋一些HTML標記。但是學
習新的語法比較費勁,不過ePerl它和Perl沒有什么區別,如果需要用于一般
目的的嵌入Perl方案,ePerl更佳。而EmbPerl在特殊的時候更為出色。在使
用eperl和EmbPerl前必須安裝它們的模塊。這里介紹ePerl在Unix類型系統中
的安裝方法:
首先到:www.engelschall.com/sw/eperl/下在相應的ePerl模塊,
在eperl源目錄下面依次輸入:perl Makefile.pl、make、make test、make
install。在以SSI形式使用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/htmlnn”;
Print “I Love Perl”;
這樣的程序,每一次都要啟動一個進程。
而使用了FCGI模塊以后:
use FCGI;
while(FCGI::accept() >=0 )
{
print "Content-type: text/htmlnn";
print "I Love Perl”;
}
exit 0;
這樣每次之需要啟動一個CGI進程,大大緩解了過渡占用系統資源
的問題。
從CGI轉化到FCGI,并不難,只要了解它的基本結構。
如上面的兩個例子,只要把Print“Content-type : text/html”;
Print“I Love Perl”;這兩句,套入響應循環代碼中就可以了。當然前
提是你要安裝了FCGI這個模塊,否則就會出現錯誤。在UNIX類型系統(包
括: Linux/FreeBSD/SunOs),你可以這樣:
下載,到www.cpan.org下載FCGI模塊,然后tar zvxf filename.
tar.gz,完成后出現以該文件名命名的目錄,進入目錄后,依次輸入perl
Makefile.pl、make、maketest,然后開始安裝make install。怎樣就
完成了。
在Windows中,我用的是Perl 5.2,本來是Perl 5.6,可是怎么也
沒有安裝上去,我的朋友也是如此。到
http://www.activestate.com/ppmpackages/5.005/zips下載FCGI模
塊后,解壓縮。啟動MS-DOS窗口。提示符下面輸入ppm,然后出現PPM>,
輸入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與其它程序的分別,好與弊
。每種程序語言都有它的好的一面和壞的一面。我們不應該去偏袒某一方,
或詆毀某一方。讓CGI的程序員們不會被老板罵。當你用FCGI寫出來的程序,
將會比你以前的程序快得多。我目前正致力于把我十幾個的商用程序進行FCGI
的優化,效果的確不錯。當你學習過CGI ASP和PHP之后,你會感覺到CGI
更加適合于大型程序的編寫。曾經有人這么評論:
小型站臺php(比如GuestBook)
中型大型用perl+fastcgi(比如Webmail Business)
巨型用C/C++語言……
如果您有什么獨特見解或疑問,小生愿洗耳恭聽,電郵給我Tanshuai@Bigfoot.com。
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";
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 "foon";
print "barn";
print “HELLO WORLD”;
print "baz n";
print "quuxn";
采用ePerl 以后:
foo
bar
< ? print “HELLO WORLD”; !>
baz
quux
而PHP:
foo
bar
<? echo “HELLO WORLD”; !>
baz
quux
從上面三個里之中,我們可以看出,Perl和PHP一樣都具有嵌入的功能,
當然你非要說echo比print少一個字母我也沒有辦法:)另一個是embPerl,
embPerl在和ePerl很多方面都很相像。它們的主要不同在于ePerl不是HTML
專用的,而embPerl是專門用于HTML的。EmbPerl提供了一些元命令來完成
特殊任務,像填充HTML表等等。用了特殊的方法解釋一些HTML標記。但是學
習新的語法比較費勁,不過ePerl它和Perl沒有什么區別,如果需要用于一般
目的的嵌入Perl方案,ePerl更佳。而EmbPerl在特殊的時候更為出色。在使
用eperl和EmbPerl前必須安裝它們的模塊。這里介紹ePerl在Unix類型系統中
的安裝方法:
首先到:www.engelschall.com/sw/eperl/下在相應的ePerl模塊,
在eperl源目錄下面依次輸入:perl Makefile.pl、make、make test、make
install。在以SSI形式使用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/htmlnn”;
Print “I Love Perl”;
這樣的程序,每一次都要啟動一個進程。
而使用了FCGI模塊以后:
use FCGI;
while(FCGI::accept() >=0 )
{
print "Content-type: text/htmlnn";
print "I Love Perl”;
}
exit 0;
這樣每次之需要啟動一個CGI進程,大大緩解了過渡占用系統資源
的問題。
從CGI轉化到FCGI,并不難,只要了解它的基本結構。
如上面的兩個例子,只要把Print“Content-type : text/html”;
Print“I Love Perl”;這兩句,套入響應循環代碼中就可以了。當然前
提是你要安裝了FCGI這個模塊,否則就會出現錯誤。在UNIX類型系統(包
括: Linux/FreeBSD/SunOs),你可以這樣:
下載,到www.cpan.org下載FCGI模塊,然后tar zvxf filename.
tar.gz,完成后出現以該文件名命名的目錄,進入目錄后,依次輸入perl
Makefile.pl、make、maketest,然后開始安裝make install。怎樣就
完成了。
在Windows中,我用的是Perl 5.2,本來是Perl 5.6,可是怎么也
沒有安裝上去,我的朋友也是如此。到
http://www.activestate.com/ppmpackages/5.005/zips下載FCGI模
塊后,解壓縮。啟動MS-DOS窗口。提示符下面輸入ppm,然后出現PPM>,
輸入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與其它程序的分別,好與弊
。每種程序語言都有它的好的一面和壞的一面。我們不應該去偏袒某一方,
或詆毀某一方。讓CGI的程序員們不會被老板罵。當你用FCGI寫出來的程序,
將會比你以前的程序快得多。我目前正致力于把我十幾個的商用程序進行FCGI
的優化,效果的確不錯。當你學習過CGI ASP和PHP之后,你會感覺到CGI
更加適合于大型程序的編寫。曾經有人這么評論:
小型站臺php(比如GuestBook)
中型大型用perl+fastcgi(比如Webmail Business)
巨型用C/C++語言……
如果您有什么獨特見解或疑問,小生愿洗耳恭聽,電郵給我Tanshuai@Bigfoot.com。