维普资讯http://www.cqvip.com
开源技术》》>
●
●
PHP沉思录。
◎文/左轻侯金震
工作模型
PHP的工作模型非常特殊。从某种程度上说,P ̄AS、PNE、S/eve流行的We技HPPAS.TJPSrl等tb术有着本质上的区别。
以Jv为例,aaWe应用领域,两种技aaJv在b有
巨_~一ll¨¨l
术Jveve[S(aaeeg)JvelaarltJPJvrrae。areS ̄JSvPaSvt
是一种特殊类型的Jv
程序,它通过实现相关接aa口,处理Web服务器发送过来的请求,完成相应
的工作。JP在形式上是一种类似于P的脚本,SHP
PHP在网站开发方面一直与SN的JEU2E和微软的.T并驾齐NE相比,HP完全来P自于开源社区,这
但是事实上,最后也被编译成Srl。因此,它eevt可
以在JP[eltS ̄Sre中使用各种缓存技术,如数据Jv例
库连接池。AS.E的机制与此类似。于AS,然也PNT至P虽是一种解释型语言,是仍然提供了Aplao对但pitnci
它依托于AS解P驱,过与后两者象来存放应用程序级的全局变量,不
释器在IIS中驻留的进程,整个应用程序的生命在
期有效。PHP却完全不是这样。作为一种纯解释型语
使它具有一些特言,HPP脚本在每次被解释时进行初始化,在解释每殊之处。本文对完毕后终止运行。这种运行是互相独立的,一次这些特殊之处所请求都会创建一个单独的进程或线程,来解释相
应的页面文件。面创建的变量和其他对象,只页都在当前的页面内部可见,法跨越页面访问。终无在止运行后,面中申请的、有被代码显式释放的页没外部资源,包括内存、数据库连接、文件句柄、
Sce连接等,都会被强行释放。okt也就是说,PP无法在语言级别直接访问跨H
|季ttSr0i霉art丢tT:cae:Vts誊ai每acerVS
做的思考,会使我们对PHP有一个
更好的理
越页面的变量,也无法创建驻留内存的对象。见
下例:
Ice}Ⅲ¨誊alS事:¨一tr一~ae:tsitVrT
Illt¥=¨;l…uscaiaSpctt每≤tb—i—i
Pmmme1OS ̄gr*
维普资讯http://www.cqvip.com
开源技术>>>
Sairetr)就不复存在。因此,无论刷新页面多少tcTs类也tVae
次,¥tir量都会回到起点:先被初始化为0Sac变tVa,然后在
异特性(性能,支持跨服务器的分布式存储,P的无高和HP
缝集成等),在大型的PHP应用中,Meahd乎已经成mcce几为不可或缺的基础设施了。起使用P语言自己实现对象比HP
Tstir函数调用中被累加。以,们看到的结果永etac0StVa所我
缓冲,这种第三方解决
方案似乎更好一些。
lctt1~_毒ar舞;S霉…tr窖aTSteisVe
PP种独特的工作模型的优势在于,本上解决了令H这基
二是数据库连接的缓冲。MyQLPP供了一种内对S,H提置的数据库缓冲机制,使用起来非常简单,程序员需要做的
只是用myqAcnet代替myqcnet来打开数据库而slgonc0sloncO_
已。H会自动回收被废弃的数据库连接,供重复使用。PP以具有讽刺意味的是,在实际应用中,这种持久性数据库连接往往会导致数据库连接的伪泄漏现象:在某个时间,并发的数
据库连接过多,过了MyQ超SL的最大连接数,而导致新的从进程无法连接数据库。但是过一段时间,当并发数减少时,P会释放掉一些连接,网站又会恢复正常。出现这种现象HP的原因是,当使用ponc时,pcehp进程会不释放cnetAah的tdtcnet而当Aah的htd程数超过了myq的最大连接onc,pcet进psl