PHP内核介绍及扩展开发指南―类和对象

栏目: PHP · 发布时间: 5年前

内容简介:Extension的编译是比较简单的,下面是个示例Makefile:这将创建一个可动态加载的Extension模块,如果想将Extension静态编译进PHP,就需要使用PHP本身的编译系统,这里不作介绍。另外,Zend提供了一个小脚本来简化创建和编译Extension的过程,可以在《PHP手册》的相关章节找到其使用方法。

类和对象(TODO)

附录A. Extension的编译

Extension的编译是比较简单的,下面是个示例Makefile:

# 扩展搜索目录,模块被放到这里才能被找到和加载
# 可以从php.ini中的extension_dir命令获取该值
PHP_EXT_HOME=/home/wiki/php5/lib/php/extensions/
# PHP源代码路径
PHP_SRC=/home/wiki/wikienv/install/php-5.2.3
INCLUDE=-I$(PHP_SRC) -I$(PHP_SRC)/main -I$(PHP_SRC)/TSRM -I$(PHP_SRC)/Zend
CC=gcc

all: first_module.so

first_module.so: first_module.o
    $(CC) -shared -rdynamic -o first_module.so first_module.o

# 注意不要忘了“-DCOMPILE_DL_FIRST_MODULE=1”,否则不会导出get_module()
first_module.o: first_module.c
    $(CC) -fpic -DCOMPILE_DL_FIRST_MODULE=1 $(INCLUDE) -c first_module.c

clean:
    rm -fr *.so *.o

install: first_module.so
    cp -fp first_module.so $(PHP_EXT_HOME)

这将创建一个可动态加载的Extension模块,如果想将Extension静态编译进PHP,就需要使用 PHP 本身的编译系统,这里不作介绍。

另外,Zend提供了一个小脚本来简化创建和编译Extension的过程,可以在《PHP手册》的相关章节找到其使用方法。

目前,Zend正在开发一个更加完善和标准的Extension生成工具,可以在这里找到它: http://pecl.php.net/package/PECL_Gen

附录B. Extension的加载过程

Extension有两种加载方式,通过php.ini在启动时加载或是通过dl()函数在运行时加载,前者需在php.ini中添加一行命令:extension=myext.so。这两种方式最后都将调用一个名为php_ld()的内部函数。

php_ld()首先调用系统例程加载动态库,之后解析并执行get_module()函数来获得模块的zend_module_entry结构(参见 2.1.3 )。

然后,调用函数zend_register_module_ex()来注册模块,这个函数先将模块的zend_module_entry加入到一个名为module_registry的HashTable中,然后调用zend_register_functions将模块导出的函数加入CG(function_table)(参见 2.5 )这个HashTable中,这样我们就可以调用模块导出的函数了。最后,php_ld()将调用模块的启动函数(参见 2.4 )来初始化模块。

如果模块是dl()动态加载的,Zend还将接着调用模块的激活函数,因为当前显然有页面在运行。

最后要说明的是,通过dl()加载的模块称为“临时模块”,在页面执行完毕时将被卸载,同时,其创建的常量和资源也将被销毁。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms for Image Processing and Computer Vision

Algorithms for Image Processing and Computer Vision

Parker, J. R. / 2010-12 / 687.00元

A cookbook of algorithms for common image processing applications Thanks to advances in computer hardware and software, algorithms have been developed that support sophisticated image processing with......一起来看看 《Algorithms for Image Processing and Computer Vision》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具