php采用的是典型的模块化,分层的思想。方便扩展和维护。 从上到下一次为:
一、sapi
Server Application Programming Interface (sapi)服务端应用编程端口.
看似很高深的概念,其实说白了就是这样一个东西,服务器程序(例如:apache,ngnix)和外围程序定义了一个约定,说咱们提供几个函数,他们的函数名称是xxx 参数是xxx 然后我们之间就可以正常调用(例如php,例如asp或者一些服务器的插件)。例如如果是在linux下与apache通讯 则就是调用的apache_2.x.so
二、php 扩展组件
为php提供扩展功能的一些组件,例如我们常用的mysql驱动,加密加密解密组建 。这些组件为php提供了一些扩展功能。在php中我们可以通过函数调用的形式调用他们。
三、php层
负责与sapi层交互控制整个php运行的流程。其实也就是说调用扩展和zend核心。同时也包括文件处理等一些php核心部分。
四、zend引擎
php的核心实现,实现php的编译过程(词法分析,语法分析,语义分析等) 生成opcode, 执行opcode。其实就是个编译器加虚拟机。
Php的执行分两种情况,一种命令行执行方式,一种php网页执行方式
命令行执行时候:
首先会初始化一些环境,包括加载配置文件,加载扩展组件等。其次调用zend核心引擎生成opcode。然后执行此opcode,执行过程中如果遇到调用扩展函数,则调用相应的扩展组件入口函数。
最后执行完毕,清理现场,包括释放内存等。
网页的执行:(以apache为例)
有两种模式这是通过apache来配置的。一种是module模式。此模式中,当apache启动时候,会加载一个php模块,创建php处理进程,等待请求。当apache收到一个请求php页面的请求时候(这里是指最终定位的资源是php文件,对于采取了url重写你请求的可能是.html但是最终执行的却是.php文件也算在内)则会调用php进程去处理,其处理流程和命令行下相同,处理完毕则返回输出结果给apache,apache负责向客户端返回http应答。
一种模式是cgi模式。cgi模式不预先加载php模块,而是每次请求则产生一个php进程。通过消息发送给php进程处理,处理完毕后返回给apapche。
这个是小弟的学习笔记:可能理解上会有很多错误,乞求各位看客帮助指正,以求进步。