Skip to content

Latest commit

 

History

History
163 lines (122 loc) · 2.99 KB

《PHP扩展开发》-协程-理解PHP生命周期的过程.md

File metadata and controls

163 lines (122 loc) · 2.99 KB

理解PHP生命周期的过程

仓库地址

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

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个阶段:

1、模块初始化阶段
2、请求初始化阶段
3、执行PHP脚本阶段
4、请求关闭阶段
5、模块关闭阶段

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

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

~/codeDir/cppCode/study # touch test.php

内容如下:

<?php

echo "execute the script\n";

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

~/codeDir/cppCode/study # ./make.sh 

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

extension=study.so

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

~/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。现在,我们另开一个终端去请求一下这个服务器:

~/codeDir/phpCode/test # curl localhost:8080/test.php
RINIT
execute the script
RSHUTDOWN
~/codeDir/phpCode/test # 

我们再次请求一下:

~/codeDir/phpCode/test # curl localhost:8080/test.php
RINIT
execute the script
RSHUTDOWN
~/codeDir/phpCode/test # 

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

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

[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关闭服务器:

^CMSHUTDOWN
~/codeDir/cppCode/study # 

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

MINIT
RINIT
execute the script
RSHUTDOWN
RINIT
.
.
.
RSHUTDOWN
MSHUTDOWN

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

下一篇:梳理一下架构