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 单引号与双引号的区别
Nov 24 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
php之XML转数组函数的详解
Jun 07 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
PHP写日志的实现方法
Nov 05 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 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
phpmyadmin的#1251问题
2006/11/25 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
php跨域调用json的例子
2013/11/13 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
分分钟入门python语言
2018/03/20 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
企业文化演讲稿
2014/05/20 职场文书
软件售后服务承诺书
2014/05/21 职场文书
家长会欢迎标语
2014/06/24 职场文书
2014年质检员工作总结
2014/11/18 职场文书
学校实习推荐信
2015/03/27 职场文书
公司内部升职自荐信
2015/03/27 职场文书
药店营业员岗位职责
2015/04/14 职场文书
地道战观后感
2015/06/04 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android