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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
php日历[测试通过]
Mar 27 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
php中socket的用法详解
Oct 24 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
php.ini中的request_order推荐设置
May 10 PHP
详解js异步文件加载器
Jan 24 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php简单实现MVC
2015/02/05 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Flask-WTF表单的使用方法
2019/07/12 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
报到证丢失证明
2014/01/11 职场文书
实验心得体会
2014/09/05 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
三国演义读书笔记
2015/06/25 职场文书
班主任寄语2016
2015/12/04 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang