公共网关界面CGI

公共网关界面CGI目前在实际应用中最广,本文介绍了客户机、服务器和CGI Script之间如何进行通信和共享信息,了解这些内容有助于用户编写自己的CGI Script。

公共网关界面CGI是一种在服务器与外部Script(脚本程序)或程序之间进行交互的方法。该界面确切地说是一个网关,它通过从服务器上接收信息,并创建一个子过程,用于为CGI Script处理或存储这部分信息。

CGI能使用户在自己的Web页面上添加一些程序,这样访问者就能与该Web页面进行交互检索实时信息,与其它访问者进行交互等。

利用CGI用户可以向网站的访问者提供一种方法以访问你的数据库、存储信息和执行一些外部程序(例如发送电子邮件等)。CGI有助于将Web页面从简单 地提供静态信息转变为提供实时或动态信息。在没有CGI时,我们只能将网页放到Web上供访问者阅读。对于网页的改变,通常只能采用手工方法来重写每个语 句的HTML代码,以保证信息的及时更新。有了CGI,就可以通过创建Script来与数据库进行交互,向用户及时提供任何一个更新阶段的信息,而这些相 对于CGI为你或单位所能提供的帮助而言只不过是一个小应用。

那么,CGI是如何在客户机与服务器之间进行工作的?

CGI如何工作

服务器根据客户机在进行请求时所采用的方法,收集由客户机提供的信息,并将该部分信息发送给CGI Script。然后CGI Script进行信息处理并将结果返回服务器。服务器再对信息进行分析,最后将结果发送给客户机,流程如图1。


客户机通过使用GET、POST或HEAD方法来调用Script。而将信息提供给Script的途径则取决于所使用的方法。通常GET和POST方法,在CGI Script中比HEAD方法要用得多一些。

1、环境变量

在提出请求或调用CGI Script时,客户机和服务器要将部分信息保存在某些环境变量中,而服务器和Script都能够使用这些变量。环境变量分为三类:服务器信息、客户机信息和Script信息,这里简要地说明每类变量的大致功能和作用。

服务器信息变量:服务器提供了在用户的Script中所要用到的关于服务器本身的信息。这部分信息包括有服务器软件和所用软件的版本号、服务器名称、服务器采用的协议和协议的版本号以及服务器端口号和网关界面。

客户机信息变量:同服务器一样,客户机也要提供一些自身的信息。客户机变量能够提供有关访问本网站的访问者的信息,如访问者所使用的Web浏览器名称、 访问者来自何处等。该信息中还可能包括访问者的IP地址、访问者所在网站的域名,以及当访问的页面被口令保护时要求用名和口令。

Script信息变量:在表单(Form)和Script中也要由变量来表示信息。例如在你的表单中含有由服务器接收到的信息,服务器将这些信息保存到环 境变量中,这样你的CGI Script就可以方便地使用这些信息了。在Script信息变量中,常见的变量有QUERY-STRING(含有访问者输入的信息)、CONTENT- TYPE(告知服务器接收哪一类的信息)、CONTENET-LENGTH(用户输入信息的长度)等。

2、命令行方式

在CGI Script中允许使用命令行方式,而只有带有〈ISINDEX〉属性进行查询(query)才能使用命令行。在一个查询串中,当使用不带等号(=)的〈ISIN DEX〉标签时,服务器允许你对系统发送一个查询命令,然后返回查询结果。

在制定HTTP规则时,该方法被认为是安全的,但在以后的使用中出现了一些问题,例如有关获得对本网站根目录的访问权限问题。因此,用户最好在必要时才使用该方法。

3、STDIN和STDOUT

每个程序都有STDIN(标准输入)和STDOUT(标准输出)。CGI的STDIN是服务器的STDOUT。CGI程序先对某信息进行处理,然后将结 果送到STDOUT。服务器通过它的STDIN接收到结果,再通过它的STDOUT把结果发送给客户机, 这个流程如图2所示。

4、GET方法

在进行简单查询时,当查询串长度小于255个字符,GET方法是一种最常用的方法。具体使用GET方法是将某个查询串放到环境变量QUERY- STRING中,该变量长度限制在255个字符内,包括空格。在查询中,当“?”标记之后是一个查询串时,服务器便会创建一个环境变量QUERY- STRING,并把该查询串放到该变量中。

5、POST方法

POST方法也可以使用环境变量,但该方法向CGI Script发送的多数信息都是通过STDIN和STDOUT。

 
在POST方法应用中,当访问者使用表单向服务器发送信息时,信息先被送到服务器的STDOUT,继而进入CGI Script的STDIN。Script必然对信息进行解码和处理,然后将结果送至STDOUT。POST方法在CGI编程中是最常使用方法。

CGI Script 使用的语言

可以使用任何一种编程语言来编写CGI Script。作为用户来说,采用哪一种变成语言完全取决于编程者的应用方向和对语言的熟悉程度。

Perl:Practical Extraction and Report Language,实用提取与报表语言,可以说它在众多的CGI编程中最流行。Perl语言的语法规则简单,很容易学习,比C语言、Tcl或其他的语言容 易掌握,而且,可以用于UNIX、Windows NT、95、OS 2/Warp 和VMS以及Macintosh 和Amiga。(http://www.perl.com/perl/) 语言:是一种最常使用的编程语言,它在CGI 编程中也发挥得很出色。C语言比Perl难学,但是 C 语言程序运行速度快,并且由于C语言很灵活,因此用户几乎可以做任何事情。C 语言的一个缺点是C代码难以调试,在C程序中稍有任何改动,都要对源程序重新进行编译。因此,在C编程时,对于要求简单并且迅速的Script来说,经常 改动是麻烦的问题。

UNIX Shell:提供了用于创建简单、运行快的CGI Script的一种方法。当然,你也可以使用shell来创建相当复杂的Script,但是那样做所付出的代价非常大。而shell对于编写一些小的 Script来说是非常有效的。如果已经熟悉了UNIX,那么UNIX shell能够使你通过使用系统命令来处理查询信息,使创建Script变得十分简单。

TCL 语言: Tool Command Language,工具命令语言主要用于MS-DOS、Macintosh和UNIX系统。如果对C语言熟悉,学习TCL很容易,因为TCL的语法规则类 似于C语言。就编写CGI Script而言,TCL语言还没有像其它语言那样普及,但是它的发展速度却很快。此外,TCL语言的可移植性不是很好,因为它能使用直接的系统调用,而 这些调用往往都是计算机特定的。

Visual Basic 语言:它是创建CGI script的一种优秀语言。该语言易于学习,对初学者来说是一个比较好的选择。在CGI应用中,Visual Basic算是一个较新的语言,但是它在Internet中已经越来越多的被引入到Windows NT和Windows95的Web服务器上。Visual Basic是能够编译的BASIC编程语言,尽管没有C语言运行快,但它有一个非常显著的优点,即它在Microsoft操作系统上非常流行。

Java语言:它能够用来创建一个称为applet(小程序)的程序,浏览器以二进制方式接收到applet并能够执行它,这要求浏览器能够运行applet。

C++:是另外一种可以用来编写CGI Script的语言,C++是一个面向对象的编程语言,通过使用部分的C++源代码可以使CGI的开发变得比较容易和减少冗余。

AppleScript:广泛用在基于Macintosh的Web服务器上。该语言非常容易理解,对于一些小的应用程序来说其功能是足够强的。

CGI的未来

目前的CGI规则中有一些内在的问题,原因是在一个Web服务器上的某个CGI Script是作为一个分离的进程,而非常拥挤的网站可能会超负荷。尽管在Web服务器上,CGI是一种运行外部程序功能最强大的方法,但仍有一些方面需要提高。

一些组织已经开始编写不同的API规则,力图开发出好的方案来解决上面的问题:

FastCGI是另一个很有希望的CGI解决方案,由Open Market开放。FastCGI提供了一种方法,能够提高服务器与外部程序通信的速度,在执行CGI操作时减少服务器上的负担。FastCGI的特点是 与语言无关,与服务器无关。FastCGI的设计能够使它的程序运行在外部服务器上,放宽了对服务器系统的要求,而是主要集中在HTTP请求和执行用户身 份的认证及检查上。(http://www.fastcgi.com)

ILU Requestor的设计也是用于解决相同的问题,即CGI的高负荷和较慢的响应时间问题,尤其是在一个很忙的服务器上。ILU Requestor与具体语言无关,具有可移植和运行速度快的特点。(http://www.w3.org/hypertext/WWW/TR/WD- ilu-requestor)

ISAPI(Internet Server Application Programming Interface)由Process Software和Microsoft公司共同开发,是比较有希望能够取代CGI的API接口,特别是那些基于Windows的Web服务器。ISAPI 设计的基本思想是基于动态链接库DLL,使得后台程序运行速度提高。

风也萧萧,雨也萧萧

ps 命令常见用法


1. 查询指定pid的所有子进程
ps u –ppid 15392

2. 查询指定名字的所有进程的pid
ps -C httpd -o pid
注意: -o pid 不能与u同时出现

3. 查询所有进程的ppid
ps ax -o ppid

4. 查询所有进程
ps aux
ps -ef

5. 查询属于指定进程组的所有进程
ps -s 15392

6. 查询指定有效用户ID的所有进程
ps u -u 535

7. 查询指定有效用户名的所有进程
ps U junjie

8. 在默认显示选项的基础上显示ppid
ps ax -O ppid
如果要将ppid列命名为parent,则:
ps ax -O ppid=parent

9. 指定列宽

人来人往聚又散,人去楼空最伤情

有道是,人生自古伤离别,更那堪冷落清秋节。
离别本身是一件很令人伤感的事情,稍微再有一点环境的影响,情绪就很难控制了。
当我们离开一个熟悉的环境,突然进入一个陌生的环境时,我们会因为排斥新的环境而怀念原来的环境,这时我们就很容易思乡。
当我们送走亲人或朋友之后,看到那人去楼空的环境,看到亲人或朋友使用过的东西之后,我们也会不忍落泪。
当我们从一个熟悉的环境回到另一个熟悉的环境之后,如果另一个熟悉的环境有很多亲人或朋友,我们的情绪不会有太大的落差;如果另一个熟悉的环境没有了亲人或朋友,我们脑子里就会不断地浮现前一个环境中的亲人或朋友,这时候,也难免落泪。

父母在北京

2006年底,为找工作,我第一次来了一趟北京。

2007年5月8号在北京五道口租了一间地下室,开始了在北京的工作生涯。工作之余,我几乎玩遍了市内的稍有名气的公园,感觉还不错,至少是我从未想过,更从未有过的时光,只是未与父母家人一同欣赏,甚是遗憾。

2009年初,就是春天的时候,就想接父母来北京,怎奈当时假期很短,游人很多,没地方住,甲型H1N1流感闹得人心惶惶;后来天气炎热不宜出行,所以就一拖再拖。

终于在十一国庆来临之际,我提前把父母接了过来,是9月22号晚上来到北京的。今年十一,非比寻常,它是新中国60周年庆典和八月十五中秋节赶到了一起的盛大节日。

9月23号,我们去了最近的公园——海淀公园。海淀公园的景致还是不错的,但是可能我爸妈期望能看到一些寺庙、古建筑之类的东西,所以多少有些失望。
9月24号,我们去了天安门广场、观看了毛主席纪念堂,然后从天安门来到中山公园,离开中山公园又去了北海,这一天下来也够累的了。因为我爸妈来北京最主要的就是看看天安门和故宫了,所以第二天我们就来这个地方了,刚好还赶上可以免费参观毛主席纪念堂(存包费10元),中山公园不大,我们也仅仅是路过了,北海公园还是比较大的,但是我爸很累了,我们就草草走了一遍。
9月25号,星期五,今天上班,也好让我爸妈歇息一下。
9月26号,星期六,不上班,天气不太好,想随便转转算了,出门后觉得可以去鸟巢看看,那里不算远,我也没去过,但是
似乎我爸妈对鸟巢比较感兴趣。
9月27、28号,星期日、星期一,上班。
9月29号,天气雾蒙蒙的,不适合出游看景致,于是就选择了动物园,看了那么多动物,倒是还挺不错的。
9月30号,天气还是雾蒙蒙的,就去植物园了,本身在这个季节,植物园就不怎么美的,雾蒙蒙就雾蒙蒙吧。
10月1号,本来预报的是下雨天,但是为了新中国的60周年庆典,人为地改变了天气,把本来该下雨的天气变得清空万里,碧蓝碧蓝的,在北京呆两年了,从来没有见过这么好的天气,而且原本预报的一多半的阴天或下雨,这下几乎都变成大晴天了;怎奈国庆庆典的阅兵仪式不能到跟前去看,我们就临时改道去颐和园了,这么好的天气,我们是必须出去的,否则就太对不起这稍有的好天气了;我们进颐和园走的是新建宫门,进去之后就发现了那个直播国庆庆典的大屏幕,而且颐和园里人非常少,这下能在颐和园里既赏风光又看国庆阅兵,实在太好了。
10月2号,我们去故宫,四号线已经开通,做地铁到西单(天安门西和天安门东地铁路过不停车),然后步行道天安门,可把我们累坏了,天安门前除了人就是人,似乎全中国的人都来到天安门前似的;广场上放的是国庆庆典时群众游行展示的花车,好不漂亮;我们下午1:00 时才买票进了午门。直到下午5:00清场的时候我们才从西华门离开故宫,步行走到西单地铁(累死人了)。
10月3号,休息一天
10月4号,上午到公司走了一圈,下午就去景山公园了。
10月5号,休息一天
10月6号,上午送父母上火车,下午整理了这些天的照片,传到了我的qq空间,以便父母在家也能看到,然后就写下了这篇日记。

这些天,我们白天出去玩,晚上回来一遍吃饭,一遍听戏,每天都是那么的悠闲自得;每天买馒头、买饼、买菜;我妈做饭,我洗碗;一切都那么的自然。虽然有些事情已经无法达成共识,但我也不去计较,只要他们高兴,我就开心。
10月6号爸妈就要走了,我舍不得,但也没法挽留,就算我再往后推两天,他们到时还是要走的,所以我需要面对这个现实;送爸妈离开的时候,我什么都不想说,因为这个时候随便说一句嘱托的话,我都有可能哭出来的;9:47的火车,我们早上7:00吃饭,8:00就坐上公交车了,提前一个小时进了候车厅,因为动车没有站台票,我还弄了个例外,弄了一张动车的站台票,才把爸妈送到了车上,然后我就离开火车,不过等到火车开动后,我才做公交车回来了。
或到家之后,家里就剩我一个人,一下子显得那么的清净;窗外的风有些凉了,有道是:人生自古伤离别,更哪堪冷落清秋节。天还是那片天,阳台上的衣服少了,那张大床也一下子空了,两条被子;躺在床上,我哭了,热泪盈眶,我多想嚎啕大哭啊。
中午,我再不能端碗就吃饭了,我不得不打开冰箱看看还有什么,要不要买什么;吃过饭原来要洗三个碗,现在只洗一个了,一切都对比的那么的明显。为了让眼前的事物的变化不至于太大,我尽力让原来有的东西,暂时还有;我的小铁床暂时不拆;吃饭时,我也打开电脑,一边听戏一边吃饭,但是这个却起了相反的效果,我听的是《程婴救孤》,原来是三个人听戏,现在却剩下了我一个,程婴哭的是那么的悲惨,我也忍不住又哭了;
记得最早伤离别是在高中一年级的时候,那时候我已经深深地感觉到爸爸已经老了,我非但不能帮他干活,还要他供应我上学,就在中秋节的时候,我放假三天,回家忙了三天(当然没有干完),返校的时候,我哭了一路,晚上睡觉时还是想哭。
然后就是上大学,我开始先做汽车到安阳,然后坐火车到天津;从那时,我时不时地做梦自己去了一个很远的地方上学,我也不知道是什么地方,反正回家一次肯定很难吧。我上大学的时候,我们家很困难,应该算是最困难的时期吧,我在放寒暑假的时候就不回家,这样,一来可以省火车票,二来也能打工整点儿钱;有一次,我一年半才回了一次家。大概就是这段时期给我的身心留下了阴影吧。

很荣幸我考上了天大,也很荣幸从天外天来了新浪,最困难的时候已经过了,母亲的身体好了许多,父亲的身体却令人担心了;原以为挣很多钱,可以让父母吃的好些,穿的好些;但是这次看见父母后,他们还是那么的俭朴,虽然有钱也还是舍不得吃、舍不得穿,所以我就觉得辛辛苦苦挣钱,还不如多陪老爸老妈几天。而我身在他乡,实在有些愧对父母,愧对良心。

为了不在无聊中伤感,我下午把这些天的照片整理了一下,上传到了我的qq空间。QQ空间的相册说是不改变图片的大小,其实只是没改变图像的尺寸,清晰度却改变了,本来的1.6M的图片,上传以后只有200K了。看到父母的照片,我的心情会好一些的。

人生应该记住的16句话

1、再烦,也别忘微笑;再急,也要注意语气: 再苦,也别忘坚持;再累,也要爱自己。
2、低调做人,你会一次比一次稳健;高调做事,你会一次比一次优秀。
3、成功的时候不要忘记过去;失败的时候不要忘记还有未来。
4、有望得到的要努力,无望得到的不介意,则无论输赢姿态都会好看。
5、生活不是单行线,一条路走不通,你可以转弯。
6、泪水和汗水的化学成分相似,但前者只能为你换来同情,后者却可以为你赢的成功。
7、变老是人生的必修课,变成熟是选修课。
8、以锻炼为本,学会健康;以修进为本,学会求知;以道德为本,学会做人;以适应为本,学会生存。
9、人生四项基本原则:懂得选择,学会放弃,耐得住寂寞,经得起诱惑。
10、当所有人都低调的时候,你可以高调,但不能跑调。
11、学会忘记是生活的技术,学会微笑是生活的艺术。  
12、什么是好工作:一不影响生活作息,二不影响家庭团聚,三能养家糊口。
13、懒惰像生锈一样,比操劳更消耗身体。
14、让梦想成真的最好办法就是醒来。
15、哲人无忧,智者常乐。并不是因为所爱的一切他都拥有了,而是所拥有的一切他都爱。
16、人生有几件绝对不能失去的东西:自制的力量,冷静的头脑,希望和信心。

成大事的九种手段

    

        

            

        

    

          1、敢于决断——克服犹豫不定的习性 
                很多人之所以一事无成,最大的毛病就是缺乏敢于决断的手段,总是左顾右盼、思前想后,从而错失成功的最佳时机。成大事者在看到事情的成功可能性到来时,敢于做出重大决断,因此取得先机。 
            2、挑战弱点——彻底改变自己的缺陷 
                人人都有弱点,不能成大事者总是固守自己的弱点,一生都不会发生重大转变;能成大事者总是善于从自己的弱点上开刀,去把自己变成一个能力超强的人。一个连自己的缺陷都不能纠正的人,只能是失败者! 
            3、突破困境——从失败中撮成功的资本 
                人生总要面临各种困境的挑战,甚至可以说困境就是“鬼门关”。一般人会在困境面前浑身发抖,而成大事者则能把困境变为成功的有力跳板。 
            4、抓住机遇——善于选择、善于创造 
                机遇就是人生最大的财富。有些人浪费机遇轻而易举,所以一个个有巨大潜力的机遇都悄然溜跑,成大事都是绝对不允许溜走,并且能纵身扑向机遇。 
            5、发挥强项——做自己最擅长的事情 
                一个能力极弱的人肯定难以打开人生局面,他必定是人生舞台上重量级选手的牺牲品;成大事者关于在自己要做的事情上,充分施展才智,一步一步地拓宽成功之路。 
            6、调整心态——切忌让情绪伤害自己 
                心态消极的人,无论如何都挑不起生活和重担,因为他们无法直面一个个人生挫折,成大事者则关于高速心态,即使在毫无希望时,也能看到一线成功的亮光。 
            7、立即行动——只说不做,徒劳无益 
                一次行动胜过百遍心想。有些人是“语言的巨人,行动的矮子”,所以看不到更为实际现实的事情在他身上发生;成大事者是每天都靠行动来落实自己的人生计划的。 
            8、善于交往——巧妙利用人力资源 
                一个人不懂得交往,必然会推动人际关系的力量。成大事者的特点之一是:善于靠借力、借热去营造成功的局势,从而能把一件件难以办成的事办成,实现自己人生的规划。 
            9、重新规划——站到更高的起点上 
                人生是一个过程,成功也是一个过程。你如果满足于小成功,就会推动大成功。成大事者懂得从小到大的艰辛过程,所以在实现了一个个小成功之后,能继续拆开下一个人生的“密封袋”。 
            
                可以讲成大事者总是关于选择最佳的时机,达到最完善的结果,这就是非一般人所能做到的。因此在成功之路上,你要想成大事,首先要解决的问题就是:你的选择的事业对你推动成功的计划是否立竿见影。 

javascript encoder

我现在需要一个消息摘要算法,但是网上提供的md5.js sha1.js都比较大,仔细看了一下,里面有我不需要的东西,精简了一下,就基本可以接受了,下面是两个精简后的js:

Encoder_sha1.js      源 码大小(含注释)4K   压缩后:1.5K
Encoder_md5.js        源码大小(含注释)7K    压缩后:3.9K

未精简的sha1.js    源码大小(含注释)7K  压缩后: 2.4k
未精简的md5.js    源码大小(含注释)8.8K  压缩后: 4.6k