博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP的工作原理和生命周期
阅读量:6505 次
发布时间:2019-06-24

本文共 1230 字,大约阅读时间需要 4 分钟。

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模式下,生命周期流程如下:

php生命周期例

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的核心架构图

截图于:

PHP底层

转载地址:http://wdqyo.baihongyu.com/

你可能感兴趣的文章
【软件】Eclipse 下载
查看>>
阿里云全球19个地域节点,哪个节点的服务器好,速度快?
查看>>
PostgreSQL 9.6 for Centos7.4 最佳实践安装
查看>>
java B2B2C Springcloud电子商务平台源码 -Feign之源码解析
查看>>
Unity C#编程优化——枚举
查看>>
熊先生做原型之:简单、粗暴、有效
查看>>
TensorFlow系列专题(三):深度学习简介
查看>>
Unity Excel转Json小工具excel2json
查看>>
(十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
查看>>
切割Nginx日志的脚本
查看>>
19.7 主动模式和被动模式;19.8 添加监控主机;19.9 添加自定义模板;19.10 处理图形中的乱码;19.11...
查看>>
解决FTP服务器命令好使,工具不好使。
查看>>
awk工具(三剑客)
查看>>
Log4j 2 + Slf4j 的配置和使用Apache
查看>>
一次arp防护配置错误导致的故障
查看>>
apt-get install 报错解决办法: Unmet dependencies. Try 'apt-get -f install' with no packages
查看>>
一次反向代理负载均衡的处理过程
查看>>
CentOS.6.6中 PHP-5.5.38安装配置
查看>>
WebDNN:浏览器上运行的最快DNN执行框架(Macbook也行)
查看>>
限制 Top-N 查询结果的记录
查看>>