常见运行模式
WEB模式
CLI模式(Command Line Interface 命令行模式)
CGI模式(Common Gateway Interface 通用网关接口)
FastCGI模式
ISAPI模式
需要知道以下几点:
1、在PHP5.3以后,PHP不再有ISAPI模式。
2、要在IIS6上使用高版本PHP,必须安装FastCGI扩展
3、CLI模式下可以单独运行不做WEB使用
不管是哪一种运行模式,我们都统一称为SAPI(Server Application Programming Interface 服务器端应用编程端口),SAPI提供了一个和外部通信的接口。脚本执行的开始都是以SAPI接口实现开始的。
PHP的生命周期
PHP的基本生命周期可以概括为以下五个步骤:
1、SAPI启动,初始化模块(MINIT)
2、请求处理初始化(RINIT)
3、执行PHP代码
4、关闭请求(RSHUEDOWN)
5、SAPI关闭,关闭模块(MSHUTDOWN)
在模块初始化(MINIT)的阶段,PHP开始初始化其内核子系统,加载每个扩展模块,调用模块初始化例程(MINIT),使每个扩展可以初始化内部变量、分配资源、注册资源处理器,向ZEND虚拟机注册函数等。
到了请求初始化阶段,PHP会在ZEND虚拟机建立PHP脚本的运行环境,调用每个扩展的请求初始化函数(RINIT),设定特定的环境变量,根据请求分配资源等。
一旦请求被初始化,ZEND虚拟机会将PHP解释成OPCODE,并运行。如需要调用扩展的函数,ZEND虚拟机会将参数绑定到该函数,并临时交出控制权直到函数结束。
在脚本运行结束后,PHP会调用每一个扩展的请求关闭函数(RSHUEDOWN),以执行最后的清理工作,随后ZEND虚拟机会执行清理过程,回收变量的内存。
请求关闭后,SAPI继续等待其他请求或是关闭信号,对于CGI和CLI等SAPI没有下一个请求,SAPI会立即关闭。关闭期间,PHP再次遍历每一个扩展,调用模块关闭函数(MSHUTDOWN),并最后关闭子系统。
总结以下要点:
1、PHP总共有三个模块:内核、Zend引擎、以及扩展层;
2、PHP内核用于处理请求、文件流、错误处理等相关操作;
3、Zend引擎用于将源文件转换成机器语言,然后在虚拟机上运行;(Zend虚拟机)
4、扩展层是一组函数、类库和流;
5、Zend虚拟机执行程序时,若需要连接若干扩展,会将控制器交给扩展,等处理完特定任务后返还;
6、Zend虚拟机将程序运行结果返回给PHP内核,再传送给SAPI层,最后输出到浏览器。
在TIPI有介绍不同的模型生命周期会略有不同。具体可以看第二章第一节。