转载请附上本文地址:http://blog.csdn.net/u011957758/article/details/72456298
前言
上一文:菜鸟学php扩展 之 hello world(一) ,不问所以然的,强行与php扩展say hello了。对于ext_skel自动生成的框架,将在本文进行详解,当作备忘录。
正文
ext_skel的用法
./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]
[--skel=dir] [--full-xml] [--no-help]
--extname=module module is the name of your extension(模块名,会在当前目录创建一个该名称子目录)
--proto=file file contains prototypes of functions to create(函数原型定义文件)
--stubs=file generate only function stubs in file
--xml generate xml documentation to be added to phpdoc-cvs
--skel=dir path to the skeleton directory(设置骨架生成的目录,不设置该项则默认在ext/extname下)
--full-xml generate xml documentation for a self-contained extension
(not yet implemented)
--no-help don't try to be nice and create comments in the code
and helper functions to test if the module compiled (生成的代码中不显示各种帮助注释)
php与扩展相关的流程
1.PHP程序的启动与终止在概念上是分别存在两个的。
一个是php模块被加载的时候,模块启动函数即被引擎调用(PHP_MINIT_FUNCTION)。这使得引擎做一些例如资源类型,注册INI变量等的一次初始化,并且这些数据是常驻内存的,与之对应一个终止(PHP_MSHUTDOWN_FUNCTION)
另一个是PHP请求开始的时候,请求前的启动函数就别调用(PHP_RINIT_FUNCTION),与之对应一个请求结束后的终止(PHP_RSHUTDOWN_FUNCTION)
2.伴随着PHP的启动,便会开始把自身所有已加载的扩展的MINIT方法(全称Module Initialization,是由每个模块自己定义的函数。)(PHP_MINIT_FUNCTION),都执行一遍,在这个时间里,扩展可以定义一些自己的常量、类、资源等所有会被用户端的PHP脚本用到的东西。 这里定义的东东都会常驻内存,可以被所有请求使用,直到关掉PHP模块。
3.一个请求到来时候,PHP会迅速的开辟一个新的环境,并重新扫描自己的各个扩展, 遍历执行它们各自的RINIT方法(全称Request Initialization)(PHP_RINIT_FUNCTION), 这时候一个扩展可能会初始化在本次请求中会使用到的变量等, 还会初始化等会儿用户端(即PHP脚本)中的变量等等。
4.当请求经过业务代码,执行到最后的时候,PHP会启动回收程序&#