php扩展开发入门demo示例


Posted in PHP onSeptember 23, 2019

本文实例讲述了php扩展开发。分享给大家供大家参考,具体如下:

一、进入php源码包,找到ext文件夹

cd /owndata/software/php-5.4.13/ext

文件夹下放的都是php的相关扩展模块

二、生成自己的扩展文件夹和相关文件

php支持开发者开发自己的扩展,提供了ext_skel骨架,用来构建扩展基本文件

./ext_skel --extname=myext

运行完成后,会在ext目录下生产一个myext扩展目录

三、编写一个hello world简单测试扩展

cd myext

1.编辑myext目录下的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])

2.编辑php_myext.h文件

修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩展函数声明部分,可以增加一

PHP_FUNCTION(myext_helloworld);

3.编辑myext.c文件在这个里面增加一行PHP_FE(myext_helloworld,  NULL)

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[] */
};

最后在文件末尾加入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("my first ext,Hello World!\n");
  RETRUN_TRUE;
}

四、编译php扩展

在myext目录下运行phpize

/usr/local/webserver/php/bin/phpize

安装扩展

./configure --with-php-config=/usr/local/webserver/php/bin/php-config
 
make && make install

然后在php安装的目录下生产.so的文件

/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/myext.so

复制myext.so文件到php安装的扩展目录下

cp myext.so /usr/local/webserver/php/ext/

编辑php.ini文件加入一行扩展路径

extension=/usr/local/webserver/php/ext/myext.so

重启php-fpm

service php restart

查看php扩展是否安装进去了

/usr/local/webserver/php/bin/php -m|grep myext

确认成功后测试myext打印helloworld

/usr/local/webserver/php/bin/php -r "myext_helloworld('test');"

或者创建demo.php

<?php
echo myext_helloworld('test');
?>

/usr/local/webserver/php/bin/php demo.php

运行后输出

my first ext,Hello World!

自此扩展开发小demo就实现了

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
PHP的基本常识小结
Jul 05 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP两个n位的二进制整数相加问题的解决
Aug 26 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
PHP使用phpunit进行单元测试示例
Sep 23 #PHP
php快速导入大量数据的实例方法
Sep 23 #PHP
关于Yii中模型场景的一些简单介绍
Sep 22 #PHP
php定期拉取数据对比方法实例
Sep 22 #PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 #PHP
php设计模式之单例模式用法经典示例分析
Sep 20 #PHP
php数组和链表的区别总结
Sep 20 #PHP
You might like
谈谈PHP的输入输出流
2007/02/14 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
一句话JavaScript表单验证代码
2009/08/02 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
python如何将两个txt文件内容合并
2019/10/18 Python
Python 私有化操作实例分析
2019/11/21 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
护士找工作求职信
2014/07/02 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
工程承包协议书
2014/10/20 职场文书
先进党组织事迹材料
2014/12/26 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL