1、PHP的运行模式:

PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。

1、当我们在终端敲入php这个命令的时候,它使用的是CLI。

它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。

2、当使用Apache或者别web服务器作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。一般有:

多进程(通常编译为apache的模块来处理PHP请求)

多线程模式

简要的执行过程:

1. PHP是随着Apache的启动而运行的;

2. PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);

3. PHP总共有三个模块:内核、Zend引擎、以及扩展层;

4. PHP内核用来处理请求、文件流、错误处理等相关操作;

5. Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;

6. 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要MySQL扩展来连接MySQL数据库;

7. 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;

8. 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。

2. 运行PHP的几个阶段:

SAPI运行PHP都经过下面几个阶段:

1、模块初始化阶段(Module init) :

即调用每个扩展源码中的的PHP_MINIT_FUNCTION中的方法初始化模块,进行一些模块所需变量的申请,内存分配等。

2、请求初始化阶段(Request init) :

即接受到客户端的请求后调用每个扩展的PHP_RINIT_FUNCTION中的方法,初始化PHP脚本的执行环境。

3、执行PHP脚本

4、请求结束(Request Shutdown) :

这时候调用每个扩展的PHP_RSHUTDOWN_FUNCTION方法清理请求现场,并且ZE开始回收变量和内存。

5、关闭模块(Module shutdown) :

Web服务器退出或者命令行脚本执行完毕退出会调用扩展源码中的PHP_MSHUTDOWN_FUNCTION 方法

3. 各种情况下的SAPI生命周期。

1. 单进程SAPI生命周期。(CGI)

CLI/CGI模式的PHP属于单进程的SAPI模式。这类的请求在处理一次请求后就关闭。也就是说每次请求都会重复这几个环节: 开始 - 请求开始 - 请求关闭 - 结束 。可以看到扩展的初始化花费了很多资源。

2. 多进程SAPI生命周期。(MPM的perfork方式)

通常PHP是编译为apache的一个模块来处理PHP请求(mod_php)。Apache一般会采用多进程模式, Apache启动后会fork出多个子进程(apache里可以指定开始fork出来的进程数)。每个进程的内存空间独立,每个子进程刚被fock出来都会经过开始和结束环节。

3. 多线程的SAPI生命周期。(FastCGI或者MPM的work方式里的单个进程)

多线程模式和多进程中的某个进程类似,在这种模式下,只有一个服务器进程在运行着,但会同时运行很多线程,这样可以减少一些资源开销,向Module init和Module shutdown就只需要运行一遍就行了,一些全局变量也只需要初始化一次,因为线程独具的特质,使得各个请求之间方便的共享一些数据成为可能。

更多PHP相关技术文章,请访问PHP教程栏目进行学习!

php 时间周期,php 的生命周期相关推荐

  1. asp.net application,session,static 几种变量生命周期及用法 收藏

    asp.net application,session,static 几种变量生命周期及用法 收藏 Application 是应用程序级变量,如果用到多个用户之间的通信的时候用,多用在网站计算器等,存 ...

  2. 【Redis源码分析】Redis命令处理生命周期

    运营研发团队 李乐 前言 本文主要讲解服务器处理客户端命令请求的整个流程,包括服务器启动监听,接收命令请求并解析,执行命令请求,返回命令回复等,这也是本文的主题"命令处理的生命周期" ...

  3. 两个企业级产品设计思路:流程效率指标功能生命周期长度

    最近又一轮的创投圈资本寒冬到来,以往依靠融资进行持久战的引流,拉用户,广告变现这一漫长的C端打法已经不再被资本市场所推崇,而是转变为追求如何快速变现,一单就有一单钱的短投资周期模式.而此时B端产品的优 ...

  4. C++ 作用域与生命周期

    Pascal 之父 Nicklaus Wirth 曾经提出一个公式展示出了程序的本质:程序=算法+数据结构.后人又给出一个公式与之遥相呼应:软件=程序+文档.这两个公式可以简洁明了地为我们展示程序和软 ...

  5. 数据类型,生命周期作用域

    目录 数据类型: 生命周期&作用域: 数据类型: 在C语言中,数据类型一共有char(字符型).short(短整型).int(整型).long(长整型). long long(更长的整型).f ...

  6. ES索引生命周期管理ILM

    前言 在使用ES的过程中,你是否遇到过这样的问题: 1.单个索引数据量持续增长,导致查询速度降低,运维困难 2.希望能根据时间周期自动生成新的索引,比如天.周.月自动生成新的索引 3.希望能定期自动删 ...

  7. 浅析时间序列用户生命周期的聚类方法

    http://mp.weixin.qq.com/s?src=3&timestamp=1482222651&ver=1&signature=5N0Cdx1JH9TunFAYxxO ...

  8. 用户增长——CLV用户生命周期价值CLTV 笔记(一)

    文章目录 1 概念介绍 1.1 概念介绍 1.2 关联指标 1.3 计算方式 1.4 LTV的价值 1.5 应用场景 1.5.1 宏观方面的几个场景: 1.5.2 一个细分的金融场景: 1.5.3 预 ...

  9. 论网站按钮的设计艺术与生命周期

    一.饮水思源 "生命周期"一词基本上就是几个月前D2前端论坛的仅有的几个收获之一.老实讲,这次的D2收获很少,颇失望.最让我耿耿于怀的就是上午沙龙的那个主持人,每每听到关键处,就被 ...

最新文章

  1. Lidar与IMU标定代码实战:lidar_align
  2. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势
  3. python2.7 print函数
  4. 计算机基础与应用课程小结,计算机应用基础课程小结.docx
  5. Python报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte s
  6. login.php静态页面的设计,ps+div+css打造蓝色后台--login页面设计
  7. python 排序算法
  8. 单处理器调度算法详解
  9. 小白爬虫第一弹之抓取妹子图【更新版】
  10. python画相关性可视化图_Python可视化16matplotlibseborn-相关性热图(correlation heatmap)...
  11. 使用JavaScript实现长方形、直角三角形、平行四边形、等腰三角形、倒三角、数字三角形...
  12. select count(*) ,count() , select *
  13. 热释电传感器三个引脚_热释电传感器电路图大全(六款热释电传感器电路设计原理图详解)...
  14. stm8s103k3 周期 捕获_stm8s103k3的UART发送数据问题
  15. 《微观经济学》第四章供给与需求的市场力量
  16. 一张帖搞定同学们入学黑马前所有难题
  17. ffmpeg GPU加速压制视频
  18. cass等距离等分线段的命令键_cad直线均分的命令(CAD等分线段快捷键?)
  19. 前端性能优化:前端接口缓存方案
  20. mac如何使用命令行删除文件

热门文章

  1. 大学计算机——所有大学生都应学习的一门计算思维基础教育课程,_大学计算机_所有大学生都应学习的一门计算思维基础教育课程...
  2. java comparator相等_详解Java中Comparable和Comparator接口的区别
  3. 第十二届蓝桥杯A组省赛填空题Java思路及代码合集(相乘直线货物摆放路径回路计数)
  4. mysql事务中怎么更改空值_MySQL事务
  5. 篡改referer_HTTP_REFERER的用法及伪造
  6. 吉林省2021高考成绩排名查询,2021年吉林高考成绩排名查询系统,吉林高考位次排名表...
  7. javascript对象包含哪些要素_javascript有哪几种对象?
  8. 虚拟机环境下DPDK运行时的一些错误解决
  9. 使用准现网的数据,使用本地的样式脚本,本地调试准现网页面(PC适用)
  10. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---55