当前位置: 首页 > news >正文

【PHP】编写php扩展

【PHP】编写php扩展

第一步
下载PHP的源代码,如php-5.4.16。解压后进入php-5.4.16/ext目录。输入 ./ext/_skel –extname=myext,myext就是扩展的名称,执行后生成myext目录。
ext/_skel是PHP官方提供的用于生成php扩展骨架代码的工具。
cd myext。可以看到php/_myext.h、myext.c、config.m4等几个文件。config.m4是AutoConf工具的配置文件,用来修改各种编译选项。
第二步
修改config.m4,将
dnl PHP/_ARG/_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [ --with-myext Include myext support])
修改为
PHP/_ARG/_WITH(myext, for myext support,
[ --with-myext Include myext support])
下边还有一个 –enable-myext,是表示编译到php内核中。with是作为动态链接库载入的。
第三步
修改php/_myext.h,看到PHP/_FUNCTION(confirm/_myext/_compiled); 这里就是扩展函数声明部分,可以增加一行 PHP/_FUNCTION(myext/_helloworld); 表示声明了一个myext/_helloworld的扩展函数。
然后修改myext.c,这个是扩展函数的实现部分。
const zend/_function/_entry myext/_functions[] = {
PHP/_FE(confirm/_myext/_compiled, NULL) //* For testing, remove later./
PHP/_FE(myext/_helloworld, NULL)
PHP/_FE/_END /
Must be the last line in myext/_functions[] /*/
};
这的代码是将函数指针注册到Zend引擎,增加一行PHP/_FE(myext/_helloworld, NULL)(后面不要带分号)。
第四步
在myext.c末尾加myext/_helloworld的执行代码。
PHP/_FUNCTION(myext/_helloworld)
{
char /*arg = NULL;
int arg/_len, len;
char /*strg;
if (zend/_parse/_parameters(ZEND/_NUM/_ARGS() TSRMLS/_CC, “s”, &arg, &arg/_len) == FAILURE) {
return;
}
php/_printf(“Hello World!/n”);
RETRUN/_TRUE;
}
zend/_parse/_parameters是用来接受PHP传入的参数,RETURN/_XXX宏是用来返回给PHP数据。
第五步
在myext目录下依次执行phpize、./configure 、make、make install。然后修改php.ini加入extension=myext.so
执行php -r “myext/_helloworld(‘test’);”,输出hello world!
以上就是怎么写php的扩展的详细内容!

手把手教你写一个PHP扩展,以下通过PHP7.4版本实现,其他版本可能有差异,但整体流程相当。
一、从官网下载源码包
PHP: Downloads
二、创建模块
解压源码,找到 ext 目录,通过下面命令创建一个扩展模块
./ext/_skel.php --ext mymodel
创建成功后,会有以下提示:
三、编写模块的函数
找到创建的模块路径 ext/mymodel
1)在头文件声明函数
找到 php/_mymodel.h
在这个头文件中声明了一个名为 mymodel的PHP空间的函数,在PHP的代码里就可以像普通函数一样调用:
PHP/_FUNCTION(mymodel);
2)编写函数的具体实现
找到 mymodel.c 文件
在PHP空间注册一个函数,函数名是 mymodel
PHP/_FE(mymodel, NULL)
然后在文件末尾增加 mymodel 函数的具体实现
PHP/_FUNCTION(mymodel) {
php/_printf(“hello, mymodel”);
}
3)编译安装模块
1、在 ext/mymodel 目录下执行phpize命令
phpize
2、编译安装模块
切换到 ext/mymodel 目录
./configure --enable-foobar --with-config-path=/usr/local/php/bin/php-config
如果没有报错就可以 make 安装
make && make install
安装完成后会提示扩展文件的生成路径,比如:
Installing shared extensions: /usr/local/php742/lib/php/extensions/no-debug-non-zts-20190902/
4. 修改php.ini 引入扩展文件
extension=mymodel.so
查看模块是否加载成功
php -m | grep mymodel
四、测试,验证扩展
命令行测试 mymodel 函数,可以看到输出了在扩展定义的语句
php -r “mymodel();”

《网络安全从零到精通全套学习大礼包》

96节从入门到精通的全套视频教程免费领取

如果你也想通过学网络安全技术去帮助就业和转行,我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。

网络安全学习路线图

想要学习 网络安全,作为新手一定要先按照路线图学习方向不对,努力白费。对于从来没有接触过网络安全的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。

配套实战项目/源码

所有视频教程所涉及的实战项目和项目源码

学习电子书籍

学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的

面试真题/经验

以上资料如何领取?

http://www.jsqmd.com/news/803756/

相关文章:

  • AzurLaneAutoScript:碧蓝航线自动化脚本终极解决方案
  • 企业内如何安全地通过Taotoken管理各部门的AI模型使用权限
  • AI信息摘要系统:从RSS抓取到LLM摘要的自动化实现
  • 成都厕所漏水快速修补攻略|安无忧防水教你避坑,全城上门更省心 - 宁夏壹山网络
  • AI短视频自动生成:从大模型到MoviePy的全栈技术解析
  • 5步掌握OpenCore Configurator:黑苹果配置终极可视化指南
  • 2026年广东二手PCB设备买卖市场深度横评与官方对接指南 - 优质企业观察收录
  • 通过 Taotoken CLI 工具一键配置多开发环境下的模型终端
  • 产品经理必看:如何用‘帕累托最优’思维,设计一个让用户和老板都满意的功能迭代方案?
  • Tailark部署指南:从开发到生产环境的完整流程
  • 2026 武汉配眼镜哪里好?全流程服务优质门店盘点 - 速递信息
  • WeChatMsg:如何用开源工具构建你的个人数字记忆库
  • 智慧树刷课插件完全指南:解决90%用户遇到的安装与使用难题
  • 2026北京优选再生资源回收服务商推荐 - 速递信息
  • Azure OpenAI代理:无缝迁移OpenAI应用到Azure云服务
  • 抖音批量下载终极指南:轻松获取无水印视频的完整解决方案
  • 厦门必逛白城沙滩,看海散步赶海一站式休闲
  • 初次使用 Taotoken 模型广场进行智能体模型选型的直观感受与建议
  • 天津昊力复合钢管制造:北京天然气涂覆钢管出售找哪家 - LYL仔仔
  • SPI总线
  • 上海豆包排名公司哪家值得信赖:客户口碑深度分析(真实评价) - 品牌排行榜
  • 2026执业中药师高效备考的关键基石——基于考纲分级的章节题库 - 医考机构品牌测评专家
  • Web3与AI融合开发实战:基于Cursor的智能DApp脚手架解析
  • C# 图像清晰度“核武器”:8个PictureBox永不模糊的硬核实战技巧
  • 文生图工具到底是什么:2026普通人也能看懂的原理场景与避坑科普 - PC修复电脑医生
  • 小米AX3000路由器SSH解锁终极指南:3步获取完全控制权
  • 湖北肖氏景观工程:云梦水泥制品安装推荐几家 - LYL仔仔
  • FastAPI + 异步 SQLAlchemy 实战:从零搭建图书管理 CRUD 项目
  • 为什么MX Linux在DistroWatch上力压Ubuntu、Fedora和Zorin OS?
  • 收藏!99%的人做Agent都踩的坑(附避坑指南,小白程序员必备)