×
热搜词

QQ登录

只需一步,快速开始

手把手写一个简单的 PHP 扩展

手把手教你写一个PHP扩展,以下通过PHP7.4版本实现,其他版本可能有差异,但整体流程相当。


一、从官网下载源码包


PHP: Downloads


二、创建模块


解压源码,找到 ext 目录,通过下面命令创建一个扩展模块:


[PHP] 纯文本查看 复制代码
./ext_skel.php --ext mymodel


创建成功后,会有以下提示:


b03bef9a7236448cbdcbce416886c60b.png


三、编写模块的函数


找到创建的模块路径 ext/mymodel


(1)在头文件声明函数


找到 php_mymodel.h


在这个头文件中声明了一个名为 mymodel的PHP空间的函数,在PHP的代码里就可以像普通函数一样调用:


[PHP] 纯文本查看 复制代码
PHP_FUNCTION(mymodel);


3059394d71014676bf209700ba9515bd.png

(2)编写函数的具体实现


找到 mymodel.c 文件


在PHP空间注册一个函数,函数名是 mymodel

[PHP] 纯文本查看 复制代码
PHP_FE(mymodel, NULL)


b7202de45ea84e4d893e0ea084ce5e47.png

然后在文件末尾增加 mymodel 函数的具体实现


[PHP] 纯文本查看 复制代码
PHP_FUNCTION(mymodel) {
        php_printf("hello, mymodel");
}


ffafa1fa8087496080688e28104f7b05.png

(3)编译安装模块


1、在 ext/mymodel 目录下执行phpize命令


[PHP] 纯文本查看 复制代码
phpize


2、编译安装模块


切换到 ext/mymodel 目录


[PHP] 纯文本查看 复制代码
./configure --enable-foobar --with-config-path=/usr/local/php/bin/php-config


如果没有报错就可以 make 安装


[PHP] 纯文本查看 复制代码
make && make install


安装完成后会提示扩展文件的生成路径,比如:


Installing shared extensions:     /usr/local/php742/lib/php/extensions/no-debug-non-zts-20190902/


(4)修改php.ini 引入扩展文件


[PHP] 纯文本查看 复制代码
extension=mymodel.so


查看模块是否加载成功


[PHP] 纯文本查看 复制代码
php -m | grep mymodel


四、测试,验证扩展


命令行测试 mymodel 函数,可以看到输出了在扩展定义的语句


[PHP] 纯文本查看 复制代码
php -r "mymodel();"


26be2ac7e3fa4c00a47b5d58966414fb.png


度仙门网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与度仙门网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和度仙门网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、度仙门网管理员和版主有权不事先通知发贴者而删除本文

帖子地址: 

玄元一墨

写了 246 篇文章,拥有下品灵石 9544 枚,中品灵石 11421 枚,上品灵石 10002 枚,被 4 人关注

欢迎访问度仙门网!请在论坛右上角的个人设置中修改你的个性签名!
踩
回复

使用道具

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Copyright © 2018-, Duxian studio.

返回顶部