资讯专栏INFORMATION COLUMN

PHP的工作原理和生命周期

happyhuangjinjin / 3253人阅读

摘要:的工作原理和生命周期是一门适用于开发的动态语言,它可以说是一个用语言实现的包含大量组件的软件框架。无论是哪种公众模式,的工作原理都是一样的,都是作为一种运行。

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

截图于:PHP底层的运行机制与原理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28541.html

相关文章

  • Laravel 请求生命周期

    摘要:应用实例所依赖的服务提供者可以在配置文件中的节点找到。完成所有服务提供者注册到应用实例后,应用实例执行启动方法引导项目启动。或内核接收到请求,加载服务提供者,同时,将请求分发给路由器执行。 这是一篇翻译文章,原文 Request Life Cycle of Laravel,译文 Laravel 请求生命周期 首发于个人博客,转载请注明出处。 当需要使用一个框架、工具或者服务时,在使用前...

    junfeng777 评论0 收藏0
  • sessioncookie

    摘要:的作用就是为了解决协议无状态的缺陷所作的努力。的内容主要包括名字,值,过期时间,路径和域。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。中的有效期默认分钟,也就是说,客户端超过分钟,当前就会失效。 会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段。而会话,就是用户通过浏览器和服务器的一次通话。 为什么要有会话控制? 因...

    ruicbAndroid 评论0 收藏0
  • 深入了解SAPI

    摘要:将环境变量和标准输入发送到子进程子进程完成处理后将标准输出和错误信息从同一连接返回。当子进程关闭连接时,请求便告知处理完成。定义一个子进程最多处理的请求数,达到这个值,进程自动退出。 一、SAPI比较 1. SAPI 服务器应用程序编程接口,就是服务器与编程语言之间交互的接口。比如Linux命令行执行一段PHP代码,其实是Linux shell通过PHP SAPI传入一组参数,zend...

    CoderBear 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<