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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
初级的用php写的采集程序
Mar 16 PHP
PHP 可阅读随机字符串代码
May 26 PHP
Php图像处理类代码分享
Jan 19 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
Linux系统下php获得系统分区信息的方法
Mar 30 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 PHP
php与阿里云短信接口接入操作案例分析
May 27 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
JAVASCRIPT HashTable
2007/01/22 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
python实现文本文件合并
2015/12/29 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python标准库os库的函数介绍
2020/02/12 Python
python爬虫如何解决图片验证码
2021/02/14 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
初二生物教学反思
2014/02/03 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
温馨提示标语
2014/06/26 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
辞职离别感言
2015/08/04 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS