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 相关文章推荐
header跳转和include包含问题详解
Sep 08 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
PHP5函数小全(分享)
Jun 06 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
学习php中的正则表达式
Aug 17 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
php封装的page分页类完整实例
Oct 18 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
PHP读取目录树的实现方法分析
Mar 22 PHP
PHP实现发送微博消息功能完整示例
Dec 04 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
我常用的几个类
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP 数组实例说明
2008/08/18 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
Yii2如何批量添加数据
2016/05/17 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
原生js实现轮播图
2017/02/27 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
react MPA 多页配置详解
2019/10/18 Javascript
JS实现简单日历特效
2020/01/03 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
大学中国梦演讲稿
2014/04/23 职场文书
普通话宣传标语
2014/06/26 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
python实现批量移动文件
2021/04/05 Python
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript