PHP的工作原理和生命周期详解编程语言
php是一门适用于web开发的动态语言,它可以说是一个用C语言实现的包含大量组件的软件框架。那么,php是如何工作的呢?它的生命周期是怎么样的呢?
目录
表层分析
php是以请求/响应为周期运行服务端应用程序,当请求进入应用程序,流程如下:
php的每一个请求都会重复以上的交互。
php的运行模式有两种:web模式和cli模式。无论是哪种公众模式,php的工作原理都是一样的,都是作为一种SAPI运行。首先,认识下SAPI,它是什么?
Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
常见的SAPI有cli、cgi、php-fpm以及各服务具体的sapi。
在php的生命周期中,有4个关键调用:
以nginx服务器为例,在web模式下,生命周期流程如下:
SAPI运行PHP都经过下面几个阶段:
1、模块初始化阶段(module init):
这个阶段主要进行php框架、zend引擎的初始化操作。这个阶段一般是在SAPI启动时执行一次,对于FPM而言,就是在fpm的master进行启动时执行的。php加载每个扩展的代码并调用其模块初始化例程(MINIT),进行一些模块所需变量的申请,内存分配等。
2、请求初始化阶段(request init):
当一个页面请求发生时,在请求处理前都会经历的一个阶段。对于fpm而言,是在worker进程accept一个请求并读取、解析完请求数据后的一个阶段。在这个阶段内,SAPI层将控制权交给PHP层,PHP初始化本次请求执行脚本所需的环境变量。
3、php脚本执行阶段
php代码解析执行的过程。Zend引擎接管控制权,将php脚本代码编译成opcodes并顺次执行
4、请求结束阶段(request shutdown):
请求处理完后就进入了结束阶段,PHP就会启动清理程序。这个阶段,将flush输出内容、发送http响应内容等,然后它会按顺序调用各个模块的RSHUTDOWN方法。 RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
5、模块关闭阶段(module shutdown):
该阶段在SAPI关闭时执行,与模块初始化阶段对应,这个阶段主要是进行资源的清理、php各模块的关闭操作,同时,将回调各扩展的module shutdown钩子函数。这是发生在所有请求都已经结束之后,例如关闭fpm的操作。(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)
截图于:PHP底层的运行机制与原理
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17656.html
cphp相关文章
- php 动静分离原理,nginx动静分离的好处
- 【说站】php迭代器的工作原理分析
- vscode配置php开发环境_vscode搭建c语言环境
- 宝塔面板创建DVWA靶场,php-fpm报502问题
- PHP 7.2.0发布详解编程语言
- 【PHP释放MySQL的威力】(php释放mysql)
- MySQL异常捕获:使用PHP技巧轻松完成(php捕获mysql异常)
- PHP实现MySQL分页查询功能(php分页查询mysql)
- 开发环境配置Linux实现PHP开发环境(linux配置php)
- php开发web服务原理详解编程语言
- 极客漫画:一篇关于 PHP 的优点的漫画
- PHP在Linux下安装配置指南(php搭建环境linux)
- PHP添加MySQL扩展:快速实现数据库连接(php添加mysql扩展)
- 使用PHP连接MySQL数据库实现数据操作(php连接mysql类)
- Linux下简易安装 PHP(linux下php安装)
- 防止MySQL注入攻击,PHP静态解决方案(mysql防注入 php)
- PHP怎样调用MSSQL的存储过程
- php-accelerator网站加速PHP缓冲的方法
- PHP学习笔记之二php入门知识
- php入门学习知识点二PHP简单的分页过程与原理
- php数据结构与算法(PHP描述)查找与二分法查找
- 解析PHP高效率写法(详解原因)
- PHP处理SQL脚本文件导入到MySQL的代码实例
- PHP生成迅雷、快车、旋风等软件的下载链接代码实例
- PHP使用array_multisort对多个数组或多维数组进行排序