您的位置:首页 > 编程语言 > PHP开发

php运行机制

2015-07-12 16:46 477 查看
1,我们从未手动开启过php的相关进程,它是随着apache的启动而运行的。

2,php通过mod_php5.so模块与Apache相连(具体说来是SAPI,即服务器应用程序变成接口)。

3,php总共有三个模块:内核,Zend引擎,扩展层。

php内核用来处理请求,文件流,错误处理等相关操作。

Zend引擎(ZE)用以将源文件转换成机器语言,然后再虚拟机上运行。

扩展层是一组函数,类库和流,php使用他们来执行一些特定的操作。比如,我们需要mysql扩展来连接mysql数据库。

当ZE执行程序时可能会需要链接若干个扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;

最后ZE讲处理结果返还给php内核,它再将结果传送给SAPI层,最终输出到浏览器。

详细解释:

php启动第一步:

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

php调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态,看看php.ini 文件里打开了那些扩展。

MINIT 的意思是"模块初始化",各个模块都定义了一组函数、类库等用以处理其他请求。

php启动第二步:

当一个页面请求发生时,SAPI层将权限交给php层,于是php设置了回复本次请求所需的环境变量。

同时他还建立一个变量表,用来存放执行过程中产生的变量名和值。

php调用各个模块的RINIT方法,即“请求初始化”。

一个经典的例子就是session模块的RINIT,如果在php中启用了Session模块,那在调用该模块的RINIT方法时就会初始化$_SESSION变量,并将相关内容读入。

RINIT可以看做是一个准备过程,在程序执行期间就会自动启动。

php关闭第一步:

如同php启动一样,关闭也分两个步骤。

一单页面执行完毕(无论是执行到了文件末尾还是用exit或die函数终止),php就会启动清理程序,它会按顺序调用各个模块的RSHUTDOWN方法。

RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。

php关闭第二步:

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

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

这样,整个php的生命周期结束了。

需要注意的是,只有在服务器没有请求的情况下才会执行启动第一步和关闭第二步,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: