php 扩展开发

一、环境

1、ext_skel生成框架

./ext_skel --extname=hello,会生成hello目录

ext_skel在php源码包里有,还需要skeleton目录,也在一起。

php下载

ext_skel脚本下载


2、修改config.m4

dnl是注释的意思

if ... use with

Otherwise use enable

一般用enable的,把下面三行的dnl去掉


3、phpize生成configure

/usr/local/bin/或者找php安装目录下面的bin里面(如/usr/local/php/bin/)


4、configure

CFLAGS=-std=c99 ./configure --enable-hello --with-php-config=/usr/local/php/bin/php-config

CFLAGS=-std=c99:指定c99编译,貌似有的环境默认不是c99,所以要指定

--enable-hello:貌似不加也可以,有待进一步研究

--with-php-config=/usr/local/php/bin/php-config:设置当前php环境获取命令,一般跟phpize一起


5、make;make install

编译安装,会将.so复制到php的扩展目录下(就是php-config读出来的)


6、加载

改php.ini,跟其他扩展一样,重启

有可能php自动加载这个扩展目录下的所有扩展,这样只要重启就行了


7、phpinfo就可以看见了


二、开发

1、入口文件hello.c


2、配置入口函数


搜索:

zend_function_entry,里面应该有一个demo,模仿加自己的函数就好


3、编写函数

PHP_FUNCTION(hello_world) {}


4、参数输入用zend_parse_parameters


5、输出return_value

这个变量默认就有,往里面写的数据就是输出数据

array_init(return_value);//把返回数据初始化成数组

add_assoc_zval(return_value, "hello", helloArr);//往返回值中放一个数组,相当于$return_value[”hello"]=$helloArr


6、一个php数组

zval *helloArr;

ALLOC_INIT_ZVAL(helloArr);

array_init(helloArr);

add_next_index_long(helloArr, 1);

......


7、其他.c

要修改

config.m4最后面的PHP_NEW_EXTENSION

PHP_NEW_EXTENSION(hello, hello.c hello1.c src/hello2.c, $ext_shared)

hello1.c src/hello2.c就是要一起打包的文件

注意:各个.c之间没有逗号,


8、php里就可以这么用了

$res = hello_world(123);


9、调试

用命令行php某个php文件,可以看见扩展中的printf打印的内容

一般搞个main.c先把核心流程调通,然后再接入口文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值