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 相关文章推荐
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
php 文件缓存函数
Oct 08 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
一个用php实现的获取URL信息的类
2007/01/02 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
php数组去重实例及分析
2013/11/26 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
浅谈Python 函数式编程
2020/06/20 Python
详解Anaconda 的安装教程
2020/09/23 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
学生抄袭作业的检讨书
2014/10/02 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
讲座通知范文
2015/04/23 职场文书
2015年教务工作总结
2015/05/23 职场文书
幸福来敲门观后感
2015/06/04 职场文书
企业年会祝酒词
2015/08/11 职场文书
我收到了德劲DE1107
2022/04/05 无线电
图神经网络GNN算法
2022/05/11 Python