深入了解PHP【生命周期】

来源:互联网 发布:数据存储安全 编辑:程序博客网 时间:2024/06/05 17:10
<?php    echo "hello world!";

这么一段简单的代码背后,发生了什么?
今天先从PHP 的生命周期开始聊吧?

先了解一下过程:

  1. 随着apache 的启动,PHP执行相关的进程
  2. PHP是通过mod_php5.so模块来和apache相关联的也就是sapi
  3. PHP总共三个模块:内核、zend引擎、扩展层
  4. PHP内核主要是处理请求、文件流、错误处理等等
  5. Zend引擎是负责将源文件翻译成机器语言,在虚拟机上运行
  6. 扩展层是就是我们用过的函数,类库等,比如pdo mysql 啊什么的
  7. 当zend执行扩展时,先将控制权交给扩展,等处理结束后在返还
  8. zend将结果返回给php 的内核 在通过sapi 输出带浏览器上

    以上只是一个大概,接下来我们深入探讨一个请求进入,背后做了那些事

深入探讨:

  1. 第一步当你打开了Apache,php的解释器也就启动了
    PHP的启动过程主要是两个过程
    第一步:
    启动apache后,php解释器也就启动了
    PHP开始调用各个扩展的MINIT**(模块初始化)**方法,将这些扩展切换到可运行状态,(php.ini 文件中开启的扩展 :ps 这就是为什么这里一些 扩展没设置好,apache启动不了的原因)
    第二步

  2. 当有一个请求时··SAPI层将控制权交给了PHP层,于是PHP设置了用于回复本次请求所需要的环境变量,同时还建立了一个变量表,用来存放执行过程中产生的变量名 和值

  3. PHP调用各个模块的RINIT方法:请求初始化 用于初始化模块的一些全局变量如session 模块的$_SESSION变量
  4. RINIT方法是一I个准备过程,在执行前 就会启动

PHP关闭过程主要是两个过程

第一步:
13. 程序结束完毕(或使用exit die())PHP 就会启动清理程序。他会按照顺序调用模块的RSHUTDOWN方法
14. RSHUTDOWN 用于清除程序运行时产生的符号表,即对每个变来那个调用unset函数

第二步:

当所有请求结束后SAPI也准备关闭了,PHP开始执行第二部步

1.PHP开始调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会
这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。

最后盗用一张图来描述整个过程
这里写图片描述

如果有说的不对的地方 请指正:p

原创粉丝点击