详解php的启动过程

启动, 终止, 以及其中的一些点

在本书中, 你已经多次使用MINIT函数在php加载你扩展的共享库时执行初始化任务. 在第1章"php的生命周期"中, 你还学习了其他三个启动/终止函数, 与MINIT对应的是MSHUTDOWN, 另外还有一对RINIT/RSHUTDOWN方法在每个页面请求启动和终止时被调用.

生命周期

除了这四个直接链接到模块结构的函数外, 还有两个函数仅用于线程环境, 用来处理每个线程的启动和终止, 以及它们使用的似有存储空间.开始之前, 首先将你的php扩展骨架程序拷贝到php源码树的ext/sample4下. 代码如下

config.m4

PHP_ARG_ENABLE(sample4,
  [Whether to enable the "sample4" extension],
  [  enable-sample4       Enable "sample4" extension support])  

if test $PHP_SAMPLE4 != "no"; then
  PHP_SUBST(SAMPLE4_SHARED_LIBADD)
  PHP_NEW_EXTENSION(sample4, sample4.c, $ext_shared)
fi

php_sample4.h

#ifndef PHP_SAMPLE4_H
/* Prevent double inclusion */
#define PHP_SAMPLE4_H  

/* Define Extension Properties */
#define PHP_SAMPLE4_EXTNAME    "sample4"
#define PHP_SAMPLE4_EXTVER    "1.0"  

/* Import configure options
   when building outside of
   the PHP source tree */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif  

/* Include PHP Standard Header */
#include "php.h"  

/* Define the entry point symbol
 * Zend will use when loading this module
 */
extern zend_module_entry sample4_module_entry;
#define phpext_sample4_ptr &sample4_module_entry  

#endif /* PHP_SAMPLE4_H */

sample4.c

#include "php_sample4.h"
#include "ext/standard/info.h"  

static function_entry php_sample4_functions[] = {
    { NULL, NULL, NULL }
};  

PHP_MINIT_FUNCTION(sample4)
{
    return SUCCESS;
}  

PHP_MSHUTDOWN_FUNCTION(sample4)
{
    return SUCCESS;
}  

PHP_RINIT_FUNCTION(sample4)
{
    return SUCCESS;
}  

PHP_RSHUTDOWN_FUNCTION(sample4)
{
    return SUCCESS;
}
PHP_MINFO_FUNCTION(sample4)
{
}  

zend_module_entry sample4_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    PHP_SAMPLE4_EXTNAME,
    php_sample4_functions,
    PHP_MINIT(sample4),
    PHP_MSHUTDOWN(sample4),
    PHP_RINIT(sample4),
    PHP_RSHUTDOWN(sample4),
    PHP_MINFO(sample4),
#if ZEND_MODULE_API_NO >= 20010901
    PHP_SAMPLE4_EXTVER,
#endif
    STANDARD_MODULE_PROPERTIES
};  

#ifdef COMPILE_DL_SAMPLE4
ZEND_GET_MODULE(sample4)
#endif

要注意, 每个启动和终止函数在退出时都返回SUCCESS. 如果这些函数中某个返回FAILURE, 引擎就认为这个过程失败并中断php的执行.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 函数
, include
, samples
, endif
, sample
, success
sample源码
linux启动过程详解、计算机启动过程详解、tomcat启动过程详解、vxworks启动过程详解、windows启动过程详解,以便于您获取更多的相关知识。

时间: 2024-11-18 16:09:41

详解php的启动过程的相关文章

PHP技巧:详解phplib模板使用过程及运行原理

index.htm文件内容: 以下为引用的内容: <html><head><body><!-- BEGIN RowSort -->{SortList}<br><!-- END RowSort --></body></head></html> index.php内容: <?$t->set_file ("Index", "index.htm");$t-

Android的init过程详解(一)init的初始化

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An

android上传图片到PHP的过程详解_php实例

今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然后自己设置HTTP的超时时间: 复制代码 代码如下: [java] view plaincopyprint? //设置超时时间  httpclient.setTimeout(20000);  再building,runing,还是不行....这就怪了,明明好好的,怎么会突然就变成连接超时了呢!又折腾了一阵子后,也跟后台那边的朋友沟通过,他也测试了上传接口,发现没什么问题,就让我自

Android4.X中SIM卡信息初始化过程详解_Android

本文实例讲述了Android4.X中SIM卡信息初始化过程详解.分享给大家供大家参考,具体如下: Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中.SIM卡的数据信息的初始化过程主要分为如下几个步骤 1.RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理. Phone 应用初始化 Phone 对象时会建立一个 RIL 和UiccCont

新手必看:UEFI/BIOS切换中英对照图文详解

  自Win8发布以来,新出厂的预装Win8/Win8.1的电脑都默认在UEFI模式下启动操作系统.很多朋友想要更换Win7或XP,但是过程并不顺利.造成这一问题的原因不仅是因为UEFI启动需要操作系统支持,还因为预装Win8/Win8.1的电脑应微软要求都开启了安全启动(UEFI的可选标准之一),受限于内置的安全启动Key,Windows系列操作系统中只有Win8以及更新的版本才能通过安全启动验证. 长远看,UEFI必然是主流发展趋势.但鉴于很多用户仍在使用Win7,特别是32位Win7(PC

SQL Server 2005 安装图解(图文详解+全程截图)

去年暑假刚毕业的时候我去了电信实业工作,做了几个月的.NET开发,数据库用的就是SQL Server,不过是SQL Server 2000.说真的我讨厌做开发,那段经历也是我不愿去回想的,没有任何乐趣.SQL Server 2000我安装过好几次,SQL Server 2005我就安装过两次,两个版本的安装过程有很大不同.当然我在安装之前首先是参考了专家的教程.小站已经有网友跟我提过出一个SQL Server 2005安装教程.今天就分享一下安装的方法和过程,以图文的形式,一步一步详细讲解. 一

Android Activity与Service通信(不同进程之间)详解_Android

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍三种方式来实现Service与Activity之间的通信问题 Activity与Service通信的方式有三

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI

Android应用框架之应用启动过程详解_Android

在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerService,但通过之前的博客介绍,我们知道,四大组件的创建都是有AMS来完成的,其实不仅是应用程序中的组件,连Android应用程序本身也是AMS负责启动的.AMS本身运行在一个独立的进程中,当系统决定要在一个新的进程中启动一个Activity或者Service时就会先启动这个进程.而AMS启动进程的过程是从startProcessLocked启动的. 1