您好,欢迎访问一九零五行业门户网

PHP的生命周期

出处:http://cc.ecjtu.net/posts/php-life-cycle php脚本通过sapi与宿主通信,常见的方式有单进程(cli/cgi模式),多进程(通常编译为apache的模块来处理 php请求),多线程模式,还有一种embed sapi(php嵌入式,允许在c/c语言中调用php/ze提供的函数)。 无论通过哪
出处:http://cc.ecjtu.net/posts/php-life-cycle
php脚本通过sapi与宿主通信,常见的方式有单进程(cli/cgi模式),多进程(通常编译为apache的模块来处理
php请求),多线程模式,还有一种embed sapi(php嵌入式,允许在c/c++语言中调用php/ze提供的函数)。
无论通过哪种sapi运行php都经过下面几个阶段:
1:模块初始化阶段(module init)即调用每个拓展源码中的的php_minit_function中的方法初始化模块,进行
一些模块所需变量的申请,内存分配等。
2:请求初始化阶段(request init),即接受到客户端的请求后调用每个拓展的php_rinit_function中的方法,
初始化php脚本的执行环境。
3:执行php脚本
4:请求结束(request shutdown),这时候调用每个拓展的php_rshutdown_function方法清理请求现场
,并且ze开始回收变量和内存。
5:关闭模块(module shutdown)web服务器退出或者命令行脚本执行完毕退出会调用拓展源码中的
php_mshutdown_function 方法。
下面的介绍摘自tipi:
单进程sapi生命周期cli/cgi模式的php属于单进程的sapi模式。这类的请求在处理一次请求后就关闭。也就是只会经过如下几个环节: 开始 - 请求开始 - 请求关闭 - 结束 sapi接口实现就完成了其生命周期。如图2.1所示:
图2.1 单进程sapi生命周期
多进程sapi生命周期通常php是编译为apache的一个模块来处理php请求。apache一般会采用多进程模式, apache启动后会
fork出多个子进程,每个进程的内存空间独立,每个子进程都会经过开始和结束环节, 不过每个进程的开始阶
段只在进程fork出来以来后进行,在整个进程的生命周期内可能会处理多个请求。 只有在apache关闭或者进程
被结束之后才会进行关闭阶段,在这两个阶段之间会随着每个请求重复请求开始-请求关闭的环节。 
如图2.2所示:
图2.2 多进程sapi生命周期
多线程的sapi生命周期多线程模式和多进程中的某个进程类似,不同的是在整个进程的生命周期内会并行的重复着 请求开始-请求关
闭的环节
图2.3 多线程sapi生命周期
embed的sapi生命周期
embed sapi是一种比较特殊的sapi,容许你在c/c++语言中调用php/ze提供的函数。并且这种sapi和上面的三
种一样,按module init、request init、rshutdown、mshutdown的流程执行着。 当然,这只是其中一种情况。
因为特定的应用由自己特殊的需求,只是在处理php脚本这个环节基本一致。
真正令emebed模式独特的是因为它可能随时嵌入到某个程序里面去(比如你的test.exe里),然后被当作脚本的
一部分在一个请求的时候执行。控制权在php和原程序间来回传递。
其它类似信息

推荐信息