月度归档:2010年04月

痛恨的事

1、吃饭时,有其他人在旁喋喋不休。

2、男的却用TMD女头像。

3、做我一直抵触却不得不做的事。

4、睡觉时,没有一个安静的环境!

to be continued

由apache重启错误引发的问题

某日,在安装好apache2.2.11 mysql5.0 php5.2.5 这些软件后,测试phpinfo正确显示信息。

但再重启apache过程中出现了问题。如:

于是使劲的搜apache重启错误。后实在是找不到原因了。又查看应用程序apache的具体错误信息,突然发现出现了一个系统级错误1067。于是再次搜apache 1067错误。终于找到原因了。
如:

说的是不能把某些程序当做正常的服务来启动。不过还是不太懂,到底是哪错了。于是把具体的apache信息“The Apache service named  reported the following error:
>>> httpd.exe: Could not reliably determine the server’s fully qualified domain name, using 192.168.1.1 for ServerName.”

再次baidu,找到某个问题也是如此。某牛解答说:

Module 模式运行 PHP,需要线程安全版本的 PHP,你下载的是 None Thread Safe 非线程安全版本的 PHP
如果必须要要使用 NTS 的 PHP,换成 CGI / FastCGI 安装模式即可
另外你的 ServerName 设置有问题,注释掉或者换成 localhost / IP 吧~

然后,就换了个php5.2.9的php包。于是再次试验。

按照配置php非安装版的步骤,一步一步的。

1、把php目录添加到系统环境变量path中,要记得用分号分隔。

2、创建新的php环境变量。名称:PHPRC   值: D:/wamp/php (即你的php目录)

3、修改php.ini文件。查找 extension_dir ,修改为 extension_dir = ‘D;/wamp/php/ext’;  添加Directory等。

4、让apache支持php。在httpd.conf 文件底部添加
LoadModule php5_module "D:/wamp/php/php2apache2_2.dll"
PHPIniDir "D:/wamp/php"

5、重启apache。

可是ff下一运行,居然phpInfo();函数直接出来了(在ie下运行,是直接弹出下载该文件的对话框) php没有被编译!发现没什么错的啊。一步一步的开始查找,还是没什么错。

第二天,到网上搜了,步骤大同小异,没什么多大区别。但是纠结啊。还是不知道。突然看到某个答案中有这样一句“在AddType application/x-gzip .gz .tgz的下一行加上AddType application/x-httpd-php .php

我想是不是因为掉了这一句呢。 于是加上。重启。真的就出来了!。。。

OMG 。忽略了这一句。 不太懂什么意思。我想应该是和iis中需要添加".php"后缀作为被编译的文件一个道理啊。

以下关于php执行方式及ISAPI/FastCGI的笔记。
====================================

只有在CGI/FastCGI模式下non-thread-safe才会工作。模块化安装方式不起作用,windows下web server大多是多线程的。

non-thread-safe意味着更好的性能,不过差异不大,php内部就已经很高效。无论是否值得这么做,带来的困惑却有很大争议。

从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?下面聚友将为您讲述。

先从字面 意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。

再 来看PHP的两种执行方式:ISAPI和FastCGI。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检 查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)。而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。

Non Thread Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;
Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源;

Windows下的PHP 主要有两种执行方式:ISAPI 和 FastCGI。

      ISAPI 执行方式是以 DLL 动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以 ISAPI 来执行 PHP,建议选择 Thread Safe 版本;

      而 FastCGI 执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI 来执行 PHP,建议选择 Non Thread Safe 版本。

      官方并不建议你将Non Thread Safe 应用于生产环境。

php线程安全与非线程安全的区别

原地址:koda.javaeye.com/blog/662034

   
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,

这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。 从2000年10月20日发布的第一个Windows

版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是

Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会

非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方

式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的

多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是PHP运行的

最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

  为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而

不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模

式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

  因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运

行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效

率。

马云

马云精彩的一段话:
   成功的原因千千万,失败的原因就几个,去学习那些失败的经验以后,不仅不会让你胆小反而让你胆更壮。任何失败成功已经取得的经历才是我们最宝贵的财富,是 我们最需要的东西。人有时候需要有“赌徒”的精神,敢想敢做的魄力,敢闯敢试的能耐(浙商成功之处),面对不敢面对,挑战不敢挑战的事,这本身就是种成 功,性格上的成功,这种好强的性格,定会影响今后事业的成功!
   站高望远,从高处定位自己,尽自己最大能力一步一步解决麻烦,这就是经历,如果失败这也是种经历,这是你自己走出来的经历,任何人都需要这种经历,这是种 敢为天下先的精神,因为你不懦弱,因为你活出了自己。人儿一辈子不会因为你做过什么而后悔而是会因为在你衰老之时回想没做过什么而后悔!
   亲历亲为后的感悟发人深省,马云好口才!呵呵~此人才华与长相成反比!

 

马云演讲:
   今天很残酷,明天更残酷,后天很美好。大部分人死在明天晚上,看不到后天的太阳。我们要懂得用左手温暖右手,把痛苦当成快乐去欣赏去体味,才能有更大的成 功!
   任何成功都会有代价,没有人能随随便便成功,小成功小代价,大成功大代价,追求辉煌的道路,的过程其本身就一定会充满风险的,没有敢冒风险的精神何来反败 为胜、柳暗花明、让人欣羡的大成功?这是种气魄,是种韧性人性!

 

 

马云-剑走偏锋

成功者,是典范,以实际经历证明自己的理论,自己的哲学,这更加具有说服力。今天很残酷明天更残酷后天很美好,但绝大部分人死在明天晚上,然而他为什么还 能活下来而且奇迹般地成功,奇迹般造就了中国电子商务的神话,我想借用他自己的话:心中无敌,便无敌于天下!
一心一世界,心魔即魔,心佛即佛,成功只因为信念…

 

给自己一个梦想,然而我们青年中多数也非缺乏梦想,而是缺乏实施这些梦想的执行力,年轻人少有足够的耐性,晚上想想千条路,早上起来走原路,晚上出门前说 我将干这事,第二天早上仍走自己原来的路线。改变自己的感动会因一时心血来潮而抱负连连而想法重重,过后即复于平静,还原最初的自己,即使是去执行也多半 是一曝十寒!

一日复一日,明日何其多,如果你不去采取实际行动,不给自己实践梦想的机会,你将永远原封不动。有了理想后给自己一个承诺,承诺自己要把这件事情做出来。

条件不是最重要的,重要的是决心,事情并不都是万事俱备只欠东风时候才大胆放手去干的,没有条件的时候,可以创造条件。换个角度思考,大家都认为是个好机 会,都认为机会成熟的时候往往却不是你的最好机会。试想如果机会都成熟,众生芸芸,机会就一定不会眷顾于你。只有有强大野心和迷人梦想,只要你能坚定的执 行,十年如一日,才能能够走到成功的大洋彼岸。

当你坚信做一件事情的时候,你若真给自己定下承诺,给自己一份坚持,你将能走的很远。不仅仅是创业者,任何人做任何事时候都该想清楚三个问题:

其一:你想干什么?而不是你父母你让你干什么!不是朋友同事让你干什么!路是自己走出来的,自己选择自己做主。不能随波逐流,尾随他后人云亦云,也不是别 人在干什么,然后你就干什么!而是你自己到底想干什么?

其二:想清楚想干什么的时候,问下自己:我该干什么?而不是我能干什么!你虽然有条件你虽然有能力然后你未必能比别人干的更好,因为这世界上比你能干,比 你有条件干的人太多,但比你更想干好这件事的却只有你一个,如此你才有机会赢!

其三:想清楚想干什么,然后想清楚该干什么,明白该干什么同时要明白自己不该干什么,这事我能干多久,而不是我想干多久,这件事情该干多久就干多久。任何 人的一生都会面临非常之多抉择和机会,然而在之后每一个抉择和机会面前你能否依然像自己初恋那般铭记自己第一天的梦想和初衷。

在诱惑面前和小成功面前能不能坚持原则,在压力面前能否坚持是衡量一个成功人士的标准之一。

今天很残酷,明天更残酷,后天很美好,但绝大部分人死在明天晚上,所以我们必须每天努力面对今天。

原址:blog.sina.com.cn/s/blog_5d594b000100eakd.html

php不支持重载

         首先很罪过的声明一下。搞php快一年了。居然还不知道原来php是不支持重载的(面向对象中广义的重载)。真的很罪过啊。。。以前只是知道php是面向对象等等的。但是自己没有具体的试验过。人云亦云啊。接下来就看看是怎么的不支持的。
代码测试:
<?php

class A{
function a(){
echo ‘this is a’;
}
function a($b){
echo ‘this is ‘.$b;
}
}

$a = new A();

?>
很不幸,在运行这段代码的时候,php就很干脆的甩出了:Fatal error: Cannot redeclare A::a() in  …   这样的错误。说的是不能重复声明方法a();   虽然有关php的书上都写明php支持重载。不过其实那是覆盖。是子类对父类方法或变量的重写。不能叫做重载。
看看网上的大虾们的讨论吧。
【1】
突然又想到了,这个问题,不要说我为什么老是用别人的标准来衡量它,道理很简单,因为我要用,最近在对zend framework做一次构架改造,遇到了需要覆盖成员和重载的难题,但是很可惜php是不支持的,只能写很多不同名方法,这看起来也不错,但是仔细想想 这样代码的冗余度是极高的也不利于接口应用。

说道这个问题,就要说说我很早以前发现的php bug,最后的结论php具有执行的不确定性,当它找不到默认构造的时候的时候(也就是写入一个参量不存在的php构造方法),这个时候php依然执行了它的默认无参数构造,而这在程序中会引起很大的问题。这个问题我当时从php的bug report得到的回答这是对的,我是错的,我不知道我对对象的理解是否有问题,我只知道它执行了一个我不期望的方法,但这被认为是对的,原因就是当在没 有重载概念时当然是对的,为什么不对?因为只要参数不违法就能执行,php似乎对参量控制都很松(这种松是我无法忍受的),php最大的问题就是 false是没有值,不是null就是空,这是一个很奇妙的问题,等于在php中机会不会出错的,这也就能解释为什么它不能重载,因为当他发现方法没有时他根本无法判断这到底是不存在还是类没有初始化,因为他们得到的结果都是一样的!而我不知道为什么这么一个愚蠢的问题为什么得不到修正,至少我知道的语言 里没有这样false不知道是啥的语言,php就是这样的。牢骚就不说了,写点难看的具有php特色的代码去。

原址:edwardpro.javaeye.com/blog/198288

php确实有点搞人。如构造函数中存在参数,如
class b{
__construct($a,$b){

}
}
但是实例化的时候,$b = new b(); 这样可以直接通过!且无任何错误。//错误
这里的构造函数如是这样写法 __construct($a,$b){} 则不会被编译通过。且会产生一个致命错误,Parse error: parse error, expecting `T_FUNCTION’ ;而如果是 function __construct($a,$b){}  然后实例化$b = new b(); 这里不会产生一个致命错误,而是出现两个Warning: Missing argument 1 for b::__construct() 警告;虽然程序还会继续往下运行,但是这样的程序不规范且参数的非必要性;所以还是避免这样的疏忽。再次谢谢网友jakey9826的指正。

【2】某牛答:
php不支持函数的重载,以后也不会支持
在oop中,函数的重载有两个条件
1、参数的个数不同——php支持参数缺省,无法用参数个数区别
2、参数的类型不同——php是弱类型语言,会根据上下文自动做类型转换
所以,php不可能支持函数的重载

解决方案:
同上面那个类A,做如下修改。
class A{
function a(){
$args = func_num_args();        //获取参数数量
switch($args){
case 0:
echo ‘没有参数’;
break;
case 1:
do something…
break;

default:
break;
}
}
}

php其实是提供重载的。不过并非是面向对象中的那个重载意思了。所以 忽忽。。。
php手册中:PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。

【转】黄健翔:大小于再清按捺不住了 我早已提前言中

真不好意思,关于周洋和于再清的事情,我又阴暗地提前言中了:“爱听才会这样说”,其实我们都是于再清。

今天,大大小小的于再清们,终于在周洋在省 里庆功会上为父母要工作之后,按捺不住了,纷纷撕去了“人性”的伪装,露出了“嫉妒”和“仇富”的狰狞:已经有人在找周洋的麻烦,认为她得寸进尺,要的太 多。因为,她已经拿了320万奖金和90平米的住房啊。

妈呀,真的好多啊,让人真的嫉妒的受不了不 平衡耶!

把后面的一句话提前在这里插一下,请允许我 一定插一下,因为有些人真的需要插,虽然这样插他们一下会让文章看着很不像样,就为自己痛 快吧:今天可以这样说,假如你自己想过上好日子,有钱有尊严,请一定要尊重别人有钱和有尊严的权力。“等贵贱、均贫富”的幻想往往被利用,最后的结果是等 了贱均了贫,少数人贵 而富。史不绝书。

拜托,你们就不能让我自食其言一次吗?别老 是让我骄傲,那样使人落后。你们心里这点丑陋能多憋几天再露馅儿行吗?或者你们就是想用这样的手段让我总是落后着?我说我怎么老不进步呢,原来“中了共军 的奸计”啊。

早在两会当时,我就想反问所有跳出来骂于再 清的人:假如周洋不是拿了金牌,假如周洋本来不是一个穷运动员而是已经拿过金牌得过重奖的富人,假如周洋的对立面,也就是说批评她的人不是一个官员(因为 官员现在大众传播中和名人富人一样是没道理可讲的舆论弱势群体,天生没理或者理亏的那一伙的),而是一个比她生活还艰难的穷人,假如周洋不是说了“要孝敬 父母”云云而是不小心说了“我看中了北京CBD一套高档精装修房子就等金牌奖金交首付了”这样的“真心话”之后,再让我们看看到底会是她,还是于再清,去 经历那一番万箭齐发批倒批臭的“大冒险”?

傻子才会看了这段文字之后以为我支持于再 清。嗨,这样的人就是很多,所以,才……

我真的懒得像大眼这厮那样为这点儿特暴露人 性和社会现实的事情去费劲说理了。在当下,道理是说不完的;说也没用,人们都是希望别人讲道理,好让自己犯浑耍横的时候更方便,就连所谓的文化人也一样, 甚至,“文化人耍浑,比流氓更无耻”——一个文化人都很羡慕嫉妒恨又不得不假装喜欢的女艺人在一个与文化人打交道很直接的环境里短暂历练后跟我说的真心 话。文化人,受刺激了吧?

以下是于再清两会上说周洋要先感谢国家之后 引起轩然大波时我的一番得罪伟大光荣正确的大多数的傻话,不再啰嗦另写了。这话在当时超前了,让众人在骂于再清充分享受“高尚”感的时候倒胃口煞风景来 的:

《爱听才会这样说》2010-03-09 10:54发布于本博客

昨天忙到晚上才有空上新浪围脖对“于再清批 周洋”表达自己的看法,今天整理在一起发个博客。

我的基本态度是,假设新闻事实是这样的,于 再清的确说了这样的话,比批判“于再清们”更重要却更难以做到的是:每个人审视一下自己,以前在何时何地何种情况下,也扮演过类似的角色?之所以某些领导 很自然习惯地公开提出这样的“先爱国后爱父母”言论,是因为我们都是这样的思想和逻辑的捍卫者。我们都爱听,很爱听,爱听了多少年多少代,我们甚至都觉得 运动员的天职就是“为国争光”,否则就该“以身殉国”。所以,别骂“于再清们”了,骂自己虽然很难,但是找个没人的地方对着镜子好好看看自己,好好想想自 己该不该骂吧。

以下是围脖合订本,我只是修改了错别字和一 些因为篇幅所限表达不到位的地方,另外为了把多条围脖衔接起来,补充了一些承上启下的文字,中途话题跑偏的部分略去,避免有人误读:

根据我的判断(其实还有亲身经验啊),大家 不要在网络上再挺周洋批领导了,这样下去周洋只会更 倒霉,领导则毫发无损,系统内部则会掀起一阵以周洋为反面典型的运动员再教育运动。不信等着瞧。再说,领导也觉得自己冤枉:以前这样批评运动员是没问题 的,“国家民族”,“组织培养”,“集体、大家”当然要列在父母之前,今儿个是怎么了?风气变了?——其实,我们原来都是于再清,别装。我们多年来都是这 么想的。或者自己不这么想,却觉得运动员们就该这样的。

我们的优势项目的运动员,个个都是国家投资 培养的为国争光的“体育特种兵”,是“战士”,不是自己“玩”出来的,所以无论肉体和精神,当然首先都属于国家属于人民不属于自己,甚至没有自己——这就 是我们的运动员动不动就爱“代表”谁和“被代表”谁的社会背景。今天忽然有人推翻这个,当然领导要说话了——习惯了嘛。

我甚至可以不客气地说,很多今天骂“于再 清”的人,过去恰恰都是“于再清”所捍卫和提倡的道理的帮凶。别装,自己一个人的时候好好想想吧。动不动要求别人代表谁的,用国家民族大帽子扣人的。今天 骂“于再清”的不少吧?

话不说到位吧,他们都以为说的是别人,其实 说的就是他们——当初骂我是卖国贼的那些人,不是都觉得我不属于自己不代表自己要属于别人和代表别人嘛?不是总有些人跑到这儿来教训黄健翔“不厚道”、 “没有央视就没有你黄健翔”吗?这些人就是“于再清”,就是“爱国贼”、“几个代表”,估计今天他们都加入了批判“于再清”的行列,享受高尚的感觉呢。如 同他们至今还以我的某句话来满足自己的爱国情怀,感觉自己高大光辉我渺小丑陋呢。我真的替“于再清”觉得委屈。

总是有看不懂人话的——我说“活该”,就是 因为我们每个人都是自己生活环境的建筑者,“光荣”的建筑者!没有我们大家齐心协力的“建设”,哪里会有“于再清”这样的思维逻辑价值观的存在和冠冕堂 皇!?你在生活里有没有过类类似于再清的言行?说!

有人说这次大家“批判于再清挺周洋”是一种 时代的进步。进步?只是因为周洋拿了金牌。如果是一个失败者,她会得到所谓民众的同情吗?2008年的刘翔是什么下场?以前的王治郅和田亮呢?这就是狗屁 进步?还不是变相的惟金牌论!进步?我没看见。我只看见两个字:活该!

假如周洋是一个失败者,然后在接受采访时说 了“对不起父母,没有能够通过获得金牌来给他们一个好生活,很难过”云云,现在还有多少人会站在她这一边呢?请回答。我们有进步吗?

如果王濛这次不是获得多枚金牌,她的张扬跳 脱的个性是被正面报道广泛接受,还是被拿来诟病指责广为批判歪曲丑化呢?再请回答。

我们进步啦?

假如你想有“自我”,首先一定要允许别人有 “自我”。(PS:今天可以这样说,假如你自己想过上好日子,有钱有尊严,请一定要尊重别人有钱和有尊严的权力。“等贵贱、均贫富”的幻想往往被利用,最 后的结果是等了贱均了贫,少数人贵而富。史不绝书。)否则,“于再清”的话就是正确的,没什么问题的;而“周洋”的话就是不对的,有问题的。——今天骂 “于再清”的人,从明天起,尊重和接受别人的自我,别再用国家民族组织单位事业这样的帽子去扣别人,大家就不再“活该”了。

其实,今晚说“周洋于再清”话题,之所以要 连番争论,我错就错在没有只骂于一个人,而是顺手骂了“大家”,说“大家”原本都是这样。我总是那么不聪明,就爱干这样得罪伟大光荣正确的“大多数”的事 情。捡便宜随大流骂一个明显处于舆论下风的“公敌”式人物,多安全踏实还露脸呢。我就那么糊涂,偏要说“大家”听着忽然一愣,然后集体不爽的话煞风景。

有人说我不成熟,我知道。“不成熟男人的十 大现象”里我占了两条而且没机会改变:一条是拿爱好(足球)当工作,另一条是不存私房钱。我家领导她妈反正也不会同意我存私房,她说了就算是找小蜜也得找 供着我花钱还帮着养家的那种,所以我是没戏成熟了。

                                                                                                  来源:新浪体育    作者:    编辑:王川  

php与cgi关系

很久都没搞明白这个cgi都底是干什么的。
属于孤陋寡闻的。cgi是 (common gateway interface)通用网关接口 。cgi通俗的说就是客户端与服务器

端的一个“桥梁”,把客户端收集的信息发送到服务器端;经过服务器端的处理后,把服务器端的信息返回到

客户端。

不过cgi又必须运行在网络服务器上,又怎么解释?

cgi作为一种标准,也作为一种编程语言(错了,不是一种编程语言)。即浏览器与服务器之间的“桥梁”!即

php、jsp、asp等编程语言也是一种cgi程序。且都是遵循cgi标准的。这也就是为什么cgi都必须在网络服务

器上运行的原因了。

CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。

CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器。CGI将Web的一组简单的静态超媒体文

档变成一个完整的新的交互式媒体。

通常情况下,当web服务器接收到来自于浏览器的文件请求时,就把浏览器请求的文件发送给浏览器,并告

诉浏览器发送的文件的类型。但是,如果浏览器请求的不是一个文件,即URL指向的是一个程序(或脚本),则

Web服务器将首先执行这个程序,然后再将程序产生的输出结果像文件一样发送给浏览器。任何遵从CGI标准的、

由Web服务器执行的、能从Web服务器接收信息或发送信息给Web服务器的程序叫做CGI程序。CGI程序与所用的Web

服务器无关,在任何Web服务器上都可执行(任何特定的web服务器上都能执行)。

CGI是用来沟通HTML表单和服务器端程序的接口(interface)。说它是接口,也就是说CGI并不是一种语言,

而是可以被其他语言所应用的一个规范集。理论上讲,你可以用任何的程序语言来编写CGI程序,只要在编程

的时候符合CGI规范所定义的一些东西就可以了。由于C语言在平台无关性上表现不错(几乎在任何的系统平

台下都有其相应编译器),而且对大多数程序员而言都算得上很熟悉(不像Perl),因此,C是CGI编程的首

选语言之一。

事实上,现在的一些主流的服务器端脚本编程语言如ASP,PHP,JSP等,都基本上具备了CGI 编程的大部

分的功能,但他们在使用上的,确实是比无论用什么语言进行CGI编程都要容易的多。所以在进行服务器端编

程的时候,一般都会首先考虑使用这些脚本编程语言。只有当他们也解决不了,比如要进行一些更为底层的

编程的时候,才会用到CGI。