Welcome 微信登录

首页 / 网页编程 / PHP / 详解php的启动过程

详解php的启动过程2013-09-08启动, 终止, 以及其中的一些点

在本书中, 你已经多次使用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"; thenPHP_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 optionswhen building outside ofthe 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 >= 20010901STANDARD_MODULE_HEADER,#endifPHP_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 >= 20010901PHP_SAMPLE4_EXTVER,#endifSTANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_SAMPLE4ZEND_GET_MODULE(sample4)#endif
要注意, 每个启动和终止函数在退出时都返回SUCCESS. 如果这些函数中某个返回FAILURE, 引擎就认为这个过程失败并中断php的执行.