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学习资源和链接.
Dec 05 PHP
php array_slice函数的使用以及参数详解
Aug 30 PHP
php xml文件操作代码(一)
Mar 20 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
php通过会话控制实现身份验证实例
Oct 18 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
vue.js表格分页示例
2016/10/18 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
python中sleep函数用法实例分析
2015/04/29 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
Python中@property的理解和使用示例
2019/06/11 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
抽奖活动主持词
2014/03/31 职场文书
秋天的图画教学反思
2014/05/01 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
活动总结报告怎么写
2014/07/03 职场文书
工会工作先进事迹
2014/08/18 职场文书
党员自评材料范文
2014/12/17 职场文书
出纳试用期自我评价
2015/03/10 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
vue的项目如何打包上线
2022/04/13 Vue.js