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 相关文章推荐
Windows PHP5和Apache的安装与配置
Jun 08 PHP
PHP下escape解码函数的实现方法
Aug 08 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
php数组使用规则分析
Feb 27 PHP
php程序内部post数据的方法
Mar 31 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 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获取表单中多个同名input元素的值
2014/03/20 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
python中__slots__用法实例
2015/06/04 Python
python实现中文转换url编码的方法
2016/06/14 Python
python将txt文件读取为字典的示例
2018/12/22 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
班长自荐书范文
2014/02/11 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
租房协议书范文
2014/08/20 职场文书
活动总结新闻稿
2014/08/30 职场文书
租赁协议书
2015/01/27 职场文书
商务考察邀请函模板
2015/02/02 职场文书
各种货币符号快捷输入
2022/02/17 杂记
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技