专栏首页PHP饭米粒手把手撸PHP扩展 0x03: 理解PHP生命周期的过程

手把手撸PHP扩展 0x03: 理解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

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

下一篇:梳理一下架构

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

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

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

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

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

投稿请联系:

shenzhe163@gmail.com

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

本文分享自微信公众号 - PHP饭米粒(phpfamily),作者:codinghuang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手撸PHP扩展 0x01: 开发规范

    2、全局PHP扩展函数以及扩展方法的参数声明放在study_*.cc、study.cc里面。

    桶哥
  • 手把手撸PHP扩展 0x08: 协程创建(四)

    size是结构体zend_fcall_info的大小,通过sizeof(fci)计算得到。

    桶哥
  • 【PHP7源码分析】PHP中$_POST揭秘

    前几天的工作中,需要通过curl做一次接口测试。让我意外的是,通过$_POST竟然无法获取到Content-Type是application/json的http...

    桶哥
  • php识别相似图片简易版

    这个识别图片的原理是分析像素点,计算平均颜色,大于平均颜色则为1,小于则为0,然后进行比对

    仙士可
  • xBIM 基础09 WeXplorer 基本应用

      在本教程中,将学习如何创建最基本和最直接的查看器。 除了展示建筑模型外,不做其他任何操作。它将只使用内置导航,但是不会对按钮做出事件响应。

    张传宁老师
  • cocos2d-x_下载游戏引擎并创建第一个项目

    拖进命令行点击回车键 ,在安装的时候有三个选择路径的,因为我做的是ios开发所有全部就是直接点了回车。

    用户1219438
  • 腾讯企业邮箱:如何判断退信的原因?

    如果您发送的邮件被退回,腾讯企业邮箱会发送一封退信通知到您的收件箱。 通过判读退信里关键字,您可以了解退信的主要原因。

    小小强
  • 图片点击放大,你的网页也能做到!

    发布于 2018-07-28 05:27 更新于 2018-08...

    walterlv
  • Go 译文之词法分析与解析 Part Three

    解析器负责启动词法器和从 channel 读取 Token 的组件。接收到 Token 后,解析器需要知道当前 Token 状态,然后将其解析到对应结构中。我们...

    波罗学
  • TensorFlow学习笔记之--[tf.clip_by_global_norm,tf.clip_by_value,tf.clip_by_norm等的区别]

    输入一个张量t,把t中的每一个元素的值都压缩在clip_value_min和clip_value_max之间。小于min的让它等于min,大于max的元素的值等...

    marsggbo

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动