深入理解PHP笔记 (一)

一、PHP的架构图
    SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI
   详见:http://www.laruence.com/2008/08/12/180.html
深入理解PHP笔记 (一)

二、PHP的启动与终止

可以看做两个概念:1、PHP做apache一个模块的启动与终止;2、当apache分配一个页面请求过来的时候,php会有一次启动与终止
PHP扩展的四个过程:
1
PHP_MINIT_FUNCTION:PHP随着apache启动的时候保存在内存中,会执行所有的扩展程序的MINIT方法,所有的扩展声明的类,常量和资源都会供所有的用户端PHP调用,直到apache卸载掉这个扩展。
2、PHP_RINIT_FUNCTION:当一个页面请求的时候,PHP会扫描所有的扩展,同时执行它们各自的RINIT方法,扩展会初始化自己的变量,和用户端的变量。
3、PHP_RSHUTDOWN_FUNCTION:程序执行完以后,会执行所有扩展的RSHUTDOWN方法,最后一次利用内核中变量执行一些东西,当RSHUTDOWN执行完,会释放所有的这次请求的东西。感觉就好像是类的销毁函数
4、PHP_MSHUTDOWN_FUNCTION:apache的php要停止的时候,扩展执行MSHUTDOWN方法,最后一次执行自己想要执行的东西,MSHUTDOWN执行完,就会进行自毁程序。这里一定要把自己擅自申请的内存申请掉

三、PHP的声明周期
两种的init和shutdown的执行次数及其频率,取决于php使用什么sapi来和宿主程序进行通信,常见的有四种:
1、cli/cgi模式:
深入理解PHP笔记 (一)
2、多进程模式:当apache启动的时候,会一下子fork出几个进程,每个进程有独立的内存,以及独自的常量
深入理解PHP笔记 (一)
3、多线程模式:只有一个服务器程序运行着,比较省资源,同时所有的程序能够公用相同的常量以及共享程序,全局变量初始化一次就行了,MINIT和MSHUTDOWN执行一次就行了
深入理解PHP笔记 (一)
4、embedded(嵌入式,在自己c程序中调用zend engine):embed api比较特殊,能够再c/c++中调用php/zend的函数。











你可能感兴趣的:(深入理解PHP笔记 (一))