php extensions(-) 代码目录结构
php extensions(-) 代码目录结构
引言
每一个php extension的目录中最少要包含config.m4、config.w32、php_extension.h、extension.c。php_extension.h和extension.c文件是以后编写php extension主要用到文件,这里就不介绍了。下面我们开一个叫reage的php extension。
1. 扩展的配置文件config.m4和config.w32
config.m4用户Unix、Linux等系统。config.m4文件告诉 UNIX 构建系统哪些扩展 configure 选项是支持的,你需要哪些扩展库,以及哪些源文件要编译成它的一部分。
config.m4配置函数PHP_ARG_WITH()和 PHP_ARG_ENABLE()的区别在于编译的时候使用 --with-* 选项还是 --enable-* 。
下面是我的一个例子
dnl在config.m4是注释的意思
config.w32 是windows下的扩展的配置文件的,具体使用查看
####2. php_reage.h
php_reage.h其实不是必须的,但是一般的都C语言项目都是包含.h和.c文件的。为了让代码看起来更加的正规,我们也使用.h文件。.h文件一般只包含函数的定义、结构体的定义。
下面是我的一个例子:
####3. reage.c reage.c是具体的代码文件的。 下面是我的一个例子:
####4. 编译php extension 在php extension的目录下,执行一下命名:
1. phpize
2. ./configure
3. make
4. make test
####5. test 将modules/reage.so 拷贝到你php的extension路径中。不知道路径的话,看下phpinfo()中extension_dir的值就可以了。然后修改php.ini添加extension=reage.so。如果没有问题,在phpinfo()中会现实reage及其版本。
####6. ext_skel ext_skel工具是专门用来生成php extension 目录结构的。ext_skel在php源码下的ext目录下。 使用ext_skel工具生成目录结构后,需要修改config.m4中大约10-20行,是关于PHP_ARG_WITH和PHP_ARG_ENABLE的。根据自己的需要将前面的注释符号(dnl)去掉
####7. 源代码 https://github.com/rentiansheng/php-extension-learn/tree/master/learn1