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的explode和implode的使用说明
Jul 17 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP下载文件的函数实例代码
May 18 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
php5.3 注意事项说明
2013/07/01 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
jquery简单体验
2007/01/10 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
vue 添加vux的代码讲解
2017/11/30 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
在Python中增加和插入元素的示例
2018/11/01 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
中文系师范生自荐信
2013/10/01 职场文书
综合素质的自我鉴定
2013/10/07 职场文书
城市规划毕业生求职信
2013/10/10 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
新年主持词
2014/03/27 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
优秀党支部申报材料
2014/12/24 职场文书
施工员岗位职责
2015/02/10 职场文书
商业计划书之服装
2019/09/09 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
Go 中的空白标识符下划线
2022/03/25 Golang