简述运行PHP文件的步骤,简述PHP运行机制
大家通过对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运行机制相关推荐
- cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤
在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格 调试好的python文件路径 或者python 空格 将python文件拖入cmd ...
- 如何在linux下运行matlab文件,linux bash下如何运行Matlab程序
购置服务器后,应安装相应的科学计算软件.对于有显示器的服务器,用户可以方便的使用图形界面操作软件.而对于常见的远程登录方式,或是无显示设备的服务器而言,一般采用bash命令操作软件.这里以常用的Mat ...
- 简述配置php运行环境的大致步骤,简述手工安装、配置PHP运行环境的大致步骤。...
根据<地下工程渗漏治理技术规程JGJ/T212-2010>规定,涂料防水层应与基层粘接牢固,涂刷均匀,不得有()等缺陷. 交换局蓄电池放电试验应在夜间()以后进行,相关的交换.传输等通信设 ...
- 用cmd运行python文件_怎么用cmd运行python文件
Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的. 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project.如果我们进 ...
- java jnlp 运行_JNLP文件如何能成功安装运行?
展开全部 具体如下: 1.第copy一步,百度搜索jre并下bai载,见下图,转到下面du的步骤. 2.第zhi二步,完成上述步骤后,根据计dao算机的情况选择要下载的版本,见下图,转到下面的步骤. ...
- 虹科Automation softPLC | 虹科KPA MoDK运行环境与搭建步骤(2)——MoDK运行环境搭建
本系列文章旨在帮助读者对虹科KPA Automation体系进行一个简要的理解,并且能使用MoDK进行快速的上手操作,包括:虹科KPA Automation.虹科KPA MoDK简介,虹科KPA Mo ...
- linux中运行.pro文件,Linux下pro*c运行配置
在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...
- IntelliJ IDEA如何直接打开运行Java文件(idea如何直接运行Java程序)
1.我们演示如何使用IDEA打开一个记事本编写的Java文件(其他Java文件操作相同),如下图: 打开之后如下图,无法运行程序. 2.需要设置一下目录结构,按下图操作: 注意:选择输出路径时不要和J ...
- java bat运行jar文件_windows下bat批量运行jar包
1. 在cmd下,java -jar ***.jar 运行后窗口不能关,但如果有多个jar,则会有多个cmd的窗口,很难看 2. 在cmd下,javaw -jar ***.jar运行后窗口可以关,但如 ...
最新文章
- vim中删除dos格式文件中的^M号的方法以及深度规整文件格式
- [心跳] 使用心跳机制实现CS架构下多客户端的在线状态实时更新以及掉线自动重连...
- UA MATH574 概率论 一个均匀分布的例题2018May/4
- KMM Kotlin expect的几种声明方式
- Oracle中如何获取当天时间的最开始的时间和最结尾的时间:
- 小波在图像视频压缩领域中的应用分析【转贴】
- java 发送邮件添加附件_java邮件自动发送时添加网络附件
- 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
- 用PD进行数据库建模经验总结
- ibatis 存储过程 结果集 map_大数据之MapReduce shuffle过程
- ECharts3使用入门
- matlab求一维热传导方程数值解代码,一维热传导方程的数值解
- 文献阅读报告:MutiPath: Multiple Probabilistic Anchor Trajectory Hypotheses for Behavior Prediction
- RISC-V E300 SOC架构介绍——1.总体介绍
- html2canvas+jsPDF实现横向打印iframe中的内容
- 什么是企业oa办公系统登录入口?oa办公系统哪家好?
- InnoDB与MyISAM的优缺点
- 股票入门基础知识4:什么是股市指数?
- AlphaFold2源码解析(9)--模型之损失
- 运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)