php底层深度探索.doc

上传人:豆**** 文档编号:17416817 上传时间:2022-05-24 格式:DOC 页数:8 大小:299KB
返回 下载 相关 举报
php底层深度探索.doc_第1页
第1页 / 共8页
php底层深度探索.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《php底层深度探索.doc》由会员分享,可在线阅读,更多相关《php底层深度探索.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流php底层深度探索.精品文档.在开始这个专题之前,先说一点题外话。大多数人学习编程语言的时候,首先关注的是这种语言的语法及其常用函数。反正,我学习C,Java,Php等语言就是按照这样的方式开始的。一般情况下,这个阶段需要一个月左右的时间就会完全掌握,并能基本熟练地使用。对于已有经验的同学,可能时间更短。其实各种语言的语法和常用函数都差别不大,有很多相通的地方。如果您在学习一种编程语言的时候,拿一些真正的项目任务作为实践,效果更佳,实践远胜于理论。我们在掌握了一门编程语言之后,又会向两个方向发展:一个方向是向上延伸,从事系统框架的探索;另一方

2、向是向下延伸,从事系统底层方面的研究,我大体画了一下这个学习过程的曲线。注:虽然我的形象一直用着“高高手”,但我只是个菜鸟,如有雷同,纯属巧合,欢迎善意拍砖。Php的语法非常简单,它不需要具备很多的知识就能上手,比如:你学习C语言,就必须非常了解各个变量如何定义,指针如何操作,内存如何创建销毁等等。再比如:你学习Java语言,就必须具有面向对象(OO)的基础,就必须清楚是什么时候需要封装,什么时候需要继承,什么时候需要多态,要做项目,怎么还得懂点SSH。Php的大部分使用者可能根本就没这么多讲究,有的人喜欢面向过程,那你就用面向过程的方式来写代码;有的人喜欢面向对象,那你就用面向对象的方式写代

3、码。Php的产生缘于互联网,目前也是互联网第一大编程语言。满足需求永远是第一位的,可维护性暂且可以放在第2位,我们的Web应用永远是版的,计划远没有变化快。我们公司里有很多phper,我曾经问过他们:“php程序是如何被执行的?”,似乎多数人都很难说清楚。这其实不奇怪,我曾经拿类似的问题问过Javaer,Javaer的回答也基本如此。有的同学会问:“研究这样的问题有没有实际意义呢?”有!理解系统的底层,有助于写出高效健壮的代码,你会更清楚程序的代码到底该怎么写。另外,写php扩展的同学更是不必说,责无旁贷。要说清楚这个问题,最好的办法是阅读一下php的源码。我闲来无事,粗读了一遍,愿意与各位共

4、享。关于php的底层工作原理,绕不开webserver,象apache,lighttpd,nginx,iis等。我这里就以apache开始。以下内容将结合apache的源码、工作原理和扩展来逐步切入php的解析过程。二、Apache运行机制剖析l B/S交互过程浏览器和服务器一次交互的过程如图:1、 浏览器(Browser)向服务器(Web Server)发出HTTP请求(Request)。2、 服务器(Web Server)分析浏览器的请求,输出响应数据(Response)。3、 浏览器(Browser)收到响应数据后进行解析,最后显示在浏览器中。下面是一份浏览器的请求数据和服务器的响应数据

5、:以上内容非常简单,我想Web开发人员都很清楚这个过程,在此不再赘述。l Apache概述Apache是目前世界上使用最为广泛的一种Web Server,它以跨平台、高效、稳定而闻名,按照官方统计的数据,Apache服务器的装机量大约占据该市场60%以上的份额,尤其是在X(Unix/Linux)平台上最为普遍。另外的一些Web Server产品,比如IIS只能运行在Windows平台上,大多结合微软的.Net技术机构一起使用。Apache最为诟病的一点是越来越重,被认为是重量级的WebServer,所以后来又出现了很多轻量级的替代产品,比如lighttpd,nginx,它们的共同特点就是效率显

6、著提高,但又往往只用于某些特定场合。l Apache组件逻辑图Apache是基于模块化设计的,核心代码其实并不多。你如果想要阅读Apache的源代码,建议你直接从core.c文件读起,主要的处理逻辑都包含在里面。Apache大多数的功能都被分散到各个模块中,系统启动的时候按需载入。MPM(Multi-ProcessingModules,多重处理模块)是Apache的核心组件,Apache通过MPM使用操作系统的资源,管理进程/线程池。另外,Apache为了能够获得最好的运行性能,他针对不同的平台(Unix/Linux、Window)做了优化,提供不同的MPM,其中最为常见的有prefork和w

7、orker两种。您的服务器跑的是哪种方式,取决于安装Apache过程中指定的编译参数。在X系统上默认编译为prefork模式。由于大多数的Unix都不支持真正的多线程,所以采用预派生子进程(prefork)方式,worker是一种基于多进程多线程混合的模式。对此感兴趣的同学可以阅读有关资料,此处不再多讲。Apache的逻辑构成以及与操作系统的关系APR(Apache portable Runtime Library),即Apache可移植运行库,是一个抽象库用来实现Apache内部组件对操作系统的使用。Apache对于php的解析,就是通过图中所标的php Module完成的。l Apache

8、的生命周期这一节的内容会与php模块的载入有关,您可以略微关注一下。以下图形用来说明Apache的生命周期(prefork模式)。这一篇多写一点内容,主要是今天终于有时间了。最近工作一直比较忙,公司里一大摊子事情需要处理,哥们首先得卖身混饭吃,其次才能在闲得蛋疼的时候写一点。闲话少叙,书接上回:lApache的生命周期这一节的内容将会阐述php模块的载入过程,请参考Apache的生命周期示意图(prefork模式下)。Apache的运行分为启动阶段和运行阶段。1. 启动阶段在启动阶段,Apache主要进行配置文件解析(例如http.conf以及Include指令设定的配置文件等)、模块加载(例

9、如mod_php.so,mod_perl.so等)和系统资源初始化(例如日志文件、共享内存段等)工作。在这个阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(X系统)或超级管理员administrator(Windows系统)完成启动。Apache和“php处理机”的装配过程就是在这个阶段完成的。“php处理机”就是负责解释和执行你的php代码的系统模块。这个名字是我特意创造的,目的是为了帮助你理解本节的内容,后面的章节还会给出更专业的名称。你单独做过php的安装配置吗?如果你做过类似的工作,下面的内容很容易理解;如果你没有做过,可以尝试安装一下,有助于加深你的理解。不过

10、,我的文章向来深入浅出,我会尽量把这个过程讲得更浅显一些。其实php的安装非常简单,如果你很感兴趣的话,可以到网上随便搜一篇安装指南,按步骤照做就可以了。把php最终集成到Apache系统中,还需要对Apache进行一些必要的设置。这里,我们就以php的mod_php5 SAPI运行模式为例进行讲解,至于SAPI这个概念后面我们还会详细讲解。假定我们安装的版本是Apache2 和 Php5,那么需要编辑Apache的主配置文件http.conf,在其中加入下面的几行内容:Unix/Linux环境下:LoadModule php5_module modules/mod_php5.soAddTyp

11、e application/x-httpd-php .php注:其中modules/mod_php5.so 是X系统环境下mod_php5.so文件的安装位置。 Windows环境下:LoadModule php5_module d:/php/php5apache2.dll AddType application/x-httpd-php .php注:其中d:/php/php5apache2.dll 是在Windows环境下php5apache2.dll文件的安装位置。 这两项配置就是告诉Apache Server,以后收到的Url用户请求,凡是以php作为后缀,就需要调用php5_module

12、模块(mod_php5.so/ php5apache2.dll)进行处理。这个过程可以参考以下的示意图:Apache启动阶段的源码包含在server/main.c中,我整理了一下源码中的对应关系: 不熟悉unix/linux的同学可能会问so文件(mod_php5.so)是个什么样的文件?unix/linux下,so后缀文件是一个DSO文件,DSO与windows系统下的dll是等价概念,都是把一堆函数封装在一个二进制文件中。调用它们的进程把它们装入内存后,会将其映射到自己的地址空间。DSO全称为Dynamic Shared Object,即动态共享对象。DLL全称为Dynamic Link

13、Library 即动态链接库。Apache 服务器的体系结构的最大特点,就是高度模块化。如果你为了追求处理效率,可以把这些dso模块在apache编译的时候静态链入,这样会提高Apache 5%左右的处理性能。2. 运行阶段在运行阶段,Apache主要工作是处理用户的服务请求。在这个阶段,Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑,防止由于代码的缺陷引起的安全漏洞,象微软的IIS就曾遭受“红色代码(Code Red)”和“尼姆达(Nimda)”等恶意代码的溢出攻击。2、运行阶段 2.1 运行阶段概述 在运行阶段,Apache主要工作是处理用户的服务请求。 在这个阶段,

14、Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑,防止由于代码的缺陷引起的安全漏洞。象微软的IIS就曾遭受“红色代码(Code Red)”和“尼姆达(Nimda)”等恶意代码的溢出攻击。u2.2 运行阶段流程 Apache将请求处理循环分为11个阶段,依次是:Post-Read-Request,URI Translation,Header Parsing,Access Control,Authentication,Authorization,MIME Type Checking,FixUp,Response,Logging,CleanUp。 Apache Hook机制 Ap

15、ache的Hook机制是指:Apache 允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。换句话说,模块可以在Apache的任何一个处理阶段中挂接(Hook)上自己的处理函数,从而参与Apache的请求处理过程。 mod_php5.so/ php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。 关于Hook机制在Windows系统开发也经常遇到,在Windows开发既有系统级的钩子,又有应用级的钩子。常见的翻译软件(例如金山词霸

16、等等)的屏幕取词功能,大多数是通过安装系统级钩子函数完成的,将自定义函数替换gdi32.dll中的屏幕输出的绘制函数。 Apache请求处理循环详解 Apache请求处理循环的11个阶段都做了哪些事情呢? 1、Post-Read-Request阶段 在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。 2、URI Translation阶段 Apache在本阶段的主要工作:将请求的URL映射到本地文件系统。模块可以在这阶段插入钩子,执行自己的映射逻辑。mod_alias就是利用这个阶段工作的。 3、Header Parsing阶段

17、Apache在本阶段的主要工作:检查请求的头部。由于模块可以在请求处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。mod_setenvif就是利用这个阶段工作的。 4、Access Control阶段 Apache在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。Apache的标准逻辑实现了允许和拒绝指令。mod_authz_host就是利用这个阶段工作的。 5、Authentication阶段 Apache在本阶段的主要工作:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。 6、Authorization阶段

18、 Apache在本阶段的主要工作:根据配置文件检查是否允许认证过的用户执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。 7、MIME Type Checking阶段 Apache在本阶段的主要工作:根据请求资源的MIME类型的相关规则,判定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。 8、FixUp阶段 这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。和Post_Read_Request类似,这是一个能够捕获任何信息的钩子,也是最常使用的钩子。 9、Response阶段 Apache在本阶段的主要工

19、作:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。 10、Logging阶段 Apache在本阶段的主要工作:在回复已经发送给客户端之后记录事务。模块可能修改或者替换Apache的标准日志记录。 11、CleanUp阶段 Apache在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境,比如文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。 模块的注入Apache的过程可以参考源码中server/core.c文件: mod_php5.so/ php5apache2.dll注入到Apache的函数中,最重要的就是Response阶段的处理函数。三、Php处理器注入Apache的过程剖析

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com