php的生命周期有哪些

  介绍

这期内容当中小编将会给大家带来有关php的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

php有什么用

php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使php经得久不衰。

1, php的运行模式

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

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

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

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

<李>

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

<李>

,多线程模式

2,一切的开始:SAPI接口

通常我们编写php 网络程序都是通过Apache或者Nginx这类WEB服务器来测试脚本。或者在命令行下通过php程序来执行php脚本。执行完成脚本后,服务器应答,浏览器显示应答信息,或者在命令结束后在标准输出显示内容。我们很少关心PHP解释器在哪里。虽然通过Web服务器和命令行程序执行脚本看起来很不一样。实际上她们的工作是一样的。命令行程序和Web程序类似,命令行参数传递给要执行的脚本,相当于通过url请求一个PHP页面。脚本戳里完成后返回响应结果,只不过命令行响应的结果是显示在终端上。脚本执行的开始都是通过SAPI接口进行的只

<>强启动apache

当给定的SAPI启动时,例如在对/usr/地方/apache/bin/apachectl开始的响应中,PHP由初始化其内核子系统开始。在接近启动例程的末尾,它加载每个扩展的代码并调用其模块初始化例程(MINIT)。这使得每个扩展可以初始化内部变量,分配资源,注册资源处理器,以及向泽注册自己的函数,以便于脚本调用这其中的函数时候泽知道执行哪些代码。

<强>请求处理初始化

接下来,PHP等待SAPI层请求要处理的页面。对于CGI或CLI等SAPI,这将立刻发生且只发生一次。对于apache, IIS或其他成熟的web服务器SAPI,每次远程用户请求页面时都将发生,因此重复很多次,也可能并发。不管请求如何产生,PHP开始于要求泽建立脚本的运行环境,然后调用每个扩展的请求初始化(即“)函数.RINIT使得扩展有机会设定特定的环境变量,根据请求分配资源,或者执行其他任务,如审核。会话扩展中有个RINIT作用的典型示例,如果启用了session.auto_start选项,即“将自动触发用户空间的session_start()函数以及预组装$ _SESSION变量。

<>强执行PHP代码

一旦请求被初始化了,泽开始接管控制权,将PHP脚本翻译成符号,最终形成操作码并逐步运行之。如任一操作码需要调用扩展的函数,泽将会把参数绑定到该函数,并且临时交出控制权直到函数运行结束。

<强>脚本结束

脚本运行结束后,PHP调用每个扩展的请求关闭(RSHUTDOWN)函数以执行最后的清理工作(如将会话变量存入磁盘)。接下来,泽执行清理过程(垃圾收集)——有效地对之前的请求期间用到的每个变量执行设置()。

<强> SAPI关闭

一旦完成,PHP继续等待SAPI的其他文档请求或者是关闭信号。<强>对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭强。关闭期间,PHP再次遍历每个扩展,调用其模块关闭(MSHUTDOWN)函数,并最终关闭自己的内核子系统。

简要的过程如下:

1。PHP是随着Apache的启动而运行的;
2。PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口),
3。PHP总共有三个模块:内核,Zend引擎,以及扩展层;
4。PHP内核用来处理请求,文件流,错误处理等相关操作,
5。Zend引擎(泽)用以将源文件转换成机器语言,然后在虚拟机上运行它;
6。扩展层是一组函数,类库和流,PHP使用它们来执行一些特定的操作,比如,我们需要mysql扩展来连接mysql数据库;
7。当泽执行程序时可能会需要连接若干扩展,这时泽将控制权交给扩展,等处理完特定任务后再返还;
8。最后,泽将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。

3, PHP的开始和结束阶段

php的生命周期有哪些