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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
简单实现PHP留言板功能
Dec 21 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
Yii redis集合的基本使用教程
Jun 14 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中strtotime函数使用方法分享
2012/01/10 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
三年大学生活自我鉴定
2014/01/21 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
售后服务承诺书范文
2014/03/26 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
信访维稳工作汇报
2014/10/27 职场文书
投资意向协议书
2015/01/29 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL