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 25 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
php中的buffer缓冲区用法分析
May 31 PHP
php5与php7的区别点总结
Oct 11 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php 生成文字png图片的代码
2011/04/17 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP生成树的方法
2015/07/28 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
用python写扫雷游戏实例代码分享
2018/05/27 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
详解爬虫被封的问题
2019/04/23 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
成教自我鉴定
2013/10/27 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
产假请假条
2014/04/10 职场文书
社会调查研究计划书
2014/05/01 职场文书
计算机专业自荐信
2014/05/24 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers