前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手撸PHP扩展 0x03: 理解PHP生命周期的过程

手把手撸PHP扩展 0x03: 理解PHP生命周期的过程

作者头像
桶哥
发布2019-07-15 15:51:54
7510
发布2019-07-15 15:51:54
举报
文章被收录于专栏:PHP饭米粒PHP饭米粒

我们在整理study.cc文件的时候,看到了一下函数:

代码语言:javascript
复制
PHP_MINIT_FUNCTION(study)
{
	return SUCCESS;
}

PHP_MSHUTDOWN_FUNCTION(study)
{
	return SUCCESS;
}

PHP_RINIT_FUNCTION(study)
{
	return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(study)
{
	return SUCCESS;
}

这几个函数是伴随着PHP生命周期来执行的。所以,我们需要知道PHP的生命周期。

PHP生命周期有5个阶段:

代码语言:javascript
复制
1、模块初始化阶段
2、请求初始化阶段
3、执行PHP脚本阶段
4、请求关闭阶段
5、模块关闭阶段

OK,我们现在来测试一下这几个函数。修改这几个函数的内容:

代码语言:javascript
复制
PHP_MINIT_FUNCTION(study)
{
	php_printf("MINIT\n");
	return SUCCESS;
}

PHP_MSHUTDOWN_FUNCTION(study)
{
	php_printf("MSHUTDOWN\n");
	return SUCCESS;
}

PHP_RINIT_FUNCTION(study)
{
	php_printf("RINIT\n");
	return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(study)
{
	php_printf("RSHUTDOWN\n");
	return SUCCESS;
}

然后,在扩展的根目录下面创建一个文件,叫做test.php

代码语言:javascript
复制
~/codeDir/cppCode/study # touch test.php

内容如下:

代码语言:javascript
复制
<?php

echo "execute the script\n";

OK,我们重新编译一下扩展:

代码语言:javascript
复制
~/codeDir/cppCode/study # ./make.sh

然后在配置文件中开启这个扩展:

代码语言:javascript
复制
extension=study.so

现在,我们开启PHP内置的服务器:

代码语言:javascript
复制
~/codeDir/cppCode/study # php -S localhost:8080
MINIT
PHP 7.3.5 Development Server started at Fri May 31 03:23:25 2019
Listening on http://localhost:8080
Document root is /root/codeDir/cppCode/study
Press Ctrl-C to quit.

我们现在所处的目录就是这个服务器的根目录。我们请求这个服务器的时候,服务器会在这个目录里面查找资源。

OK,可以看到,我们在开启服务器的时候,打印出了MINIT。现在,我们另开一个终端去请求一下这个服务器:

代码语言:javascript
复制
~/codeDir/phpCode/test # curl localhost:8080/test.php
RINIT
execute the script
RSHUTDOWN
~/codeDir/phpCode/test # 

我们再次请求一下:

代码语言:javascript
复制
~/codeDir/phpCode/test # curl localhost:8080/test.php
RINIT
execute the script
RSHUTDOWN
~/codeDir/phpCode/test # 

发现,分别打印出了RINITexecute the scriptRSHUTDOWN

然后,服务器这一边的输出内容如下:

代码语言:javascript
复制
[Fri May 31 03:32:00 2019] 127.0.0.1:46782 [200]: /test.php
[Fri May 31 03:32:23 2019] 127.0.0.1:46784 [200]: /test.php

然后,我们按ctrl + c关闭服务器:

代码语言:javascript
复制
^CMSHUTDOWN
~/codeDir/cppCode/study # 

此时,打印了MSHUTDOWN。因此,我们可以很直观的感受到,PHP的生命周期过程是:

代码语言:javascript
复制
MINIT
RINIT
execute the script
RSHUTDOWN
RINIT
.
.
.
RSHUTDOWN
MSHUTDOWN

这几个生命周期做什么事情,很多内核分析文章有讲。我们这里只需要大致了解一个流程即可。

下一篇:梳理一下架构

----------伟大的分割线-----------

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投搞。

投稿请联系:

shenzhe163@gmail.com

本文由 codinghuang 授权 饭米粒 发布,转载请注明本来源信息

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP饭米粒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档