PHP底层运行机制

原创 2011年09月15日 11:17:49

简介

我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);

PHP总共有三个模块:内核、Zend引擎、以及扩展层; PHP内核用来处理请求、文件流、错误处理等相关操作; Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它; 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库; 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;

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

深入探讨

真是的内部运行过程没有这么简单。以上过程只是个简略版,让我们再深入挖掘一下,看看幕后还发生了些什么。
◆Apache启动后,PHP解释程序也随之启动;
◆PHP的启动过程有两步:
第一步是初始化一些环境变量,这将在整个SAPI生命周期中发生作用;
第二步是生成只针对当前请求的一些变量设置。

PHP启动第一步

不清楚什么第一第二步是什么?别担心,我们接下来详细讨论一下。让我们先看看第一步,也是最主要的一步。要记住的是,第一步的操作在任何请求到达之前就发生了。

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

PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态。看看php.ini文件里打开了哪些扩展吧; MINIT的意思是“模块初始化”。各个模块都定义了一组函数、类库等用以处理其他请求。

一个典型的MINIT方法如下:

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

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的关闭也分两步:

一旦页面执行完毕(无论是执行到了文件末尾还是用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关闭第二步

最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步:

PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。

一个典型的RSHUTDOWN方法如下:

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

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


PHP——底层运行机制与原理

PHP用起来感觉很简单方便,但是要精通PHP,熟悉底层的工作原理也不是一件容易的事。1 PHP的设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘...
  • lili0710432
  • lili0710432
  • 2015年08月20日 23:57
  • 403960

探究PHP底层运行机制

本文详细讲解了PHP底层的运行机制,包括PHP内容的运作并结合实例讲解了PHP从启动到停止的整个生命周期。  简介我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;PHP通...
  • ryanho2008
  • ryanho2008
  • 2010年11月07日 11:30
  • 243

PHP底层原理 运行机制

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。 PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实现包含大量组件的软件框架。更狭义点...
  • longwoniu
  • longwoniu
  • 2016年06月05日 16:25
  • 205

探究php底层运行机制

本文转载自:http://www.myext.cn/Article/921.html 概要 简介 先看看下面这个过程: 我们从未手动开启过PHP的相关进程,它是...
  • sole_cc
  • sole_cc
  • 2014年09月14日 21:52
  • 408

PHP底层运行机制

简介 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口); PHP总...
  • txj236
  • txj236
  • 2014年10月25日 10:25
  • 248

由PHP底层工作原理说起

之前做过.net,java开发,也写过几个Php的网站,似乎3种主要编程语言都接触了。但是越来越觉得自己对编程的整个流程缺乏一个整体的认识,尤其是底层的机制。譬如网络编程,编译原理,服务器端,数据库存...
  • ZiQingFeng
  • ZiQingFeng
  • 2014年06月06日 23:31
  • 1874

浅析PHP运行机制

对于php来说,了解它的运行机制,有助于我们写出高效健壮的代码,会更清楚程序的代码到底该怎么去写,如果是做php扩展,那了解它的运行机制就更是必须的了。   一、 运行环境:LAM...
  • alibo2008
  • alibo2008
  • 2014年03月18日 17:49
  • 2265

PHP运行机制和底层原理

用一个工具,懂其原理,知其构造,用起来会更加得心应手。 PHP运行机制: PHP总共三个模块: a.PHP内核:用来处理请求、文件流、错误处理等相关操作 b.zend引擎:用以将源文件转...
  • dream_188810
  • dream_188810
  • 2017年12月19日 22:09
  • 44

PHP 底层的运行机制与原理解析

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。 PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实现包含大量组件的软件框架。更狭义点看,...
  • luyaran
  • luyaran
  • 2016年11月10日 13:55
  • 437

windows内部运行机制

Windows程序内部运行机制  要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制。本文将深入剖析Windows程序的内部运行机制,为读者扫清VC++学习...
  • woailvmengmeng
  • woailvmengmeng
  • 2013年08月12日 09:45
  • 756
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP底层运行机制
举报原因:
原因补充:

(最多只允许输入30个字)