PHP架构图SAPISAPI(ServerApplicationProgrammingInterfac)是Web服务器提供的应用程序编程接口(API),用于帮助其他开发者扩展Web服务器的能力。SAPI是一种工具,用于帮助其他开发人员编写扩展Web服务器功能的应用程序接口(API)。它将外部条件抽象出来,为PHP内部提供了一套固定统一的接口,使PHP自身的实现不受外部环境的影响,保持一定的独立性。PHP中常用的SAPI有cli(命令行模式,单进程)、php-fpm、CGI、Apache……有点像策略模式,使用相同的接口,只是实现方式会略有不同。PHP启动和终止请求前的启动阶段:MINIT:模块初始化阶段。初始化一些扩展、常量、类、资源和php脚本使用的所有其他东西。(常驻内存,可供所有请求使用。)PRINT:模块激活阶段。PHP会调用所有模块的RINIT函数。在这个阶段,各个模块还可以进行一些相关的操作,比如初始化本次请求中使用的变量。请求后的结束阶段:RSHUTDOWN:本次页面请求执行完毕,或者用户死亡(退出),则PHP会启动回收程序,回收本次请求使用的资源。这个时候,所有加载的扩展的RSHUTDOWN(俗称RequestShutdown)方法都会被执行。这时候扩展就可以利用内核中的变量表来做一些事情了。因为PHP一旦执行完所有扩展的RSHUTDOWN方法,就会释放本次请求使用的所有资源,比如变量表中的所有变量,本次请求中申请的所有内存等。MSHUTDOWN:PHP执行所有扩展的MSHUTDOWN,释放资源。PHP生命周期1.单进程SAPI生命周期(CLI/CGI)2.多进程SAPI生命周期(Apache2)3.多线程SAPI生命周期4.EmbedEmbedSAPI是一种特殊的sapi,可以让你/调用PHP/ZE以C++语言提供的功能。(了解的不多,明天再看吧!http://www.laruence.com/2008/09/23/539.html)总结一下PHP的生命周期,PHP的整个执行过程。以及如何通过SAPI与PHP模块通信。(图片基本取自参考链接,站在前人的肩膀上。)参考http://www.laruence.com/2008/08/12/180.htmlhttps://en.wikipedia.org/wiki/Server_Application_Programming_Interfacehttp://www.cunmou.com/phpbook/1.1.mdhttps://foio.github.io/php-sapi/http://www.php-internals.com/book/?p=chapt02/02-01-php-life-cycle-and-zend-engine
