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 相关文章推荐
如何使用php输出时间格式
Aug 31 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php实现paypal 授权登录
May 28 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
joomla组件开发入门教程
May 04 PHP
PHP生成短网址方法汇总
Jul 12 PHP
php强制下载文件函数
Aug 24 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 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
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
jquery 插件学习(一)
2012/08/06 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
python爬虫用mongodb的理由
2020/07/28 Python
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
中专生自我鉴定书范文
2013/12/28 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript