大家通过对PHP语言的学习,可以了解到,这是一款适合于WEB开发中的语言。我们可以利用功能强大的PHP语言来为自己实现许多功能。

先看看下面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层,最终输出到浏览器上。

深入探讨PHP运行机制

等等,没有这么简单。以上过程只是个简略版,让我们再深入挖掘一下,看看幕后还发生了些什么。

Apache启动后,PHP解释程序也随之启动;

PHP的启动过程有两步;

第一步是初始化一些环境变量,这将在整个SAPI生命周期中发生作用;

第二步是生成只针对当前请求的一些变量设置。

PHP运行机制之PHP启动第一步

不清楚什么第一第二步是什么?别担心,我们接下来详细讨论一下。

让我们先看看第一步,也是最主要的一步。要记住的是,第一步的操作在任何请求到达之前就发生了。 启动Apache后,PHP解释程序也随之启动; PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态。看看php.ini文件里打开了哪些扩展吧; MINIT的意思是“模块初始化”。各个模块都定义了一组函数、类库等用以处理其他请求。

一个典型的MINIT方法如下:

PHP_MINIT_FUNCTION(extension_name){ /* Initialize functions, classes etc */ }

PHP运行机制之PHP启动第二步

当一个页面请求发生时,SAPI层将控制权交给PHP层。于是PHP设置了用于回复本次请求所需的环境变量。同时,它还建立一个变量表,用来存放执行过程中产生的变量名和值。 PHP调用各个模块的RINIT方法,即“请求初始化”。一个经典的例子是Session模块的RINIT,如果在php.ini中启用了Session模块,那在调用该模块的RINIT时就会初始化$_SESSION变量,并将相关内容读入; RINIT方法可以看作是一个准备过程,在程序执行之间就会自动启动。

一个典型的RINIT方法如下:

PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables, pre-populate variables, redefine global variables etc */ }

PHP运行机制之PHP关闭第一步

如同PHP启动一样,PHP的关闭也分两步: 一旦页面执行完毕(无论是执行到了文件末尾还是用exit或die函数中止),PHP就会启动清理程序。它会按顺序调用各个模块的RSHUTDOWN方法。 RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。

一个典型的RSHUTDOWN方法如下:

PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }

PHP运行机制之PHP关闭第二步

最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步: PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。

一个典型的RSHUTDOWN方法如下:

PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }

这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。

简述运行PHP文件的步骤,简述PHP运行机制相关推荐

  1. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤

    在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd ...

  2. 如何在linux下运行matlab文件,linux bash下如何运行Matlab程序

    购置服务器后,应安装相应的科学计算软件.对于有显示器的服务器,用户可以方便的使用图形界面操作软件.而对于常见的远程登录方式,或是无显示设备的服务器而言,一般采用bash命令操作软件.这里以常用的Mat ...

  3. 简述配置php运行环境的大致步骤,简述手工安装、配置PHP运行环境的大致步骤。...

    根据<地下工程渗漏治理技术规程JGJ/T212-2010>规定,涂料防水层应与基层粘接牢固,涂刷均匀,不得有()等缺陷. 交换局蓄电池放电试验应在夜间()以后进行,相关的交换.传输等通信设 ...

  4. 用cmd运行python文件_怎么用cmd运行python文件

    Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的. 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project.如果我们进 ...

  5. java jnlp 运行_JNLP文件如何能成功安装运行?

    展开全部 具体如下: 1.第copy一步,百度搜索jre并下bai载,见下图,转到下面du的步骤. 2.第zhi二步,完成上述步骤后,根据计dao算机的情况选择要下载的版本,见下图,转到下面的步骤. ...

  6. 虹科Automation softPLC | 虹科KPA MoDK运行环境与搭建步骤(2)——MoDK运行环境搭建

    本系列文章旨在帮助读者对虹科KPA Automation体系进行一个简要的理解,并且能使用MoDK进行快速的上手操作,包括:虹科KPA Automation.虹科KPA MoDK简介,虹科KPA Mo ...

  7. linux中运行.pro文件,Linux下pro*c运行配置

    在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...

  8. IntelliJ IDEA如何直接打开运行Java文件(idea如何直接运行Java程序)

    1.我们演示如何使用IDEA打开一个记事本编写的Java文件(其他Java文件操作相同),如下图: 打开之后如下图,无法运行程序. 2.需要设置一下目录结构,按下图操作: 注意:选择输出路径时不要和J ...

  9. java bat运行jar文件_windows下bat批量运行jar包

    1. 在cmd下,java -jar ***.jar 运行后窗口不能关,但如果有多个jar,则会有多个cmd的窗口,很难看 2. 在cmd下,javaw -jar ***.jar运行后窗口可以关,但如 ...

最新文章

  1. vim中删除dos格式文件中的^M号的方法以及深度规整文件格式
  2. [心跳] 使用心跳机制实现CS架构下多客户端的在线状态实时更新以及掉线自动重连...
  3. UA MATH574 概率论 一个均匀分布的例题2018May/4
  4. KMM Kotlin expect的几种声明方式
  5. Oracle中如何获取当天时间的最开始的时间和最结尾的时间:
  6. 小波在图像视频压缩领域中的应用分析【转贴】
  7. java 发送邮件添加附件_java邮件自动发送时添加网络附件
  8. 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
  9. 用PD进行数据库建模经验总结
  10. ibatis 存储过程 结果集 map_大数据之MapReduce shuffle过程
  11. ECharts3使用入门
  12. matlab求一维热传导方程数值解代码,一维热传导方程的数值解
  13. 文献阅读报告:MutiPath: Multiple Probabilistic Anchor Trajectory Hypotheses for Behavior Prediction
  14. RISC-V E300 SOC架构介绍——1.总体介绍
  15. html2canvas+jsPDF实现横向打印iframe中的内容
  16. 什么是企业oa办公系统登录入口?oa办公系统哪家好?
  17. InnoDB与MyISAM的优缺点
  18. 股票入门基础知识4:什么是股市指数?
  19. AlphaFold2源码解析(9)--模型之损失
  20. 运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)

热门文章

  1. 如何让我的mfc应用程序可以在最上面?
  2. 七年程序员生涯,我学到最重要的 6 个教训,别再中招!
  3. 如何能能够学好软件编程技术
  4. 性能优化篇(5):css 内部 or 外部,该如何选择?
  5. Kafka 2.0 升级,看看携程怎么操作!
  6. pom.xml文件第一行报错_Python文件读写指南
  7. 机器学习也可以在线做!
  8. 德国80%的统计学教授都会答错的6个与P值有关的问题!
  9. 你的adonis用对了吗?不同因素的顺序竟然对结果有很大影响
  10. 废弃P-value,还是学学如何评估统计检验结果?