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桌面中心(二) 数据库写入
Mar 11 PHP
PHP 文章中的远程图片采集到本地的代码
Jul 30 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
php实现计数器方法小结
Jan 05 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
php+redis实现商城秒杀功能
Nov 19 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垃圾代码优化操作代码
2010/08/05 PHP
php session 写入数据库
2016/02/13 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
python进阶教程之词典、字典、dict
2014/08/29 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python中join函数简单代码示例
2018/01/09 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
医生辞职信范文
2015/03/02 职场文书
离婚被告答辩状
2015/05/22 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
JS ES6异步解决方案
2021/04/29 Javascript