PHP7扩展开发之基于函数方式使用lib库的方法详解


Posted in PHP onJanuary 15, 2018

本文实例讲述了PHP7扩展开发之基于函数方式使用lib库的方法。分享给大家供大家参考,具体如下:

前言

首先说下什么是lib库。lib库就是一个提供特定功能的一个文件。可以把它看成是PHP的一个文件,这个文件提供一些函数方法。只是这个lib库是用c或者c++写的。

使用lib库的场景。一些软件已经提供了lib库,我们就没必要再重复实现一次。如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。

在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。

代码

基础代码

这个扩展,我们将在say扩展上增加call_lib_fun()。say扩展相关代码大家请看这篇博文。PHP7扩展开发之hello word 文中已经详细介绍了如何创建一个扩展和提供了源码下载。

代码实现

建立lib库

增加hello.h文件。代码如下:

#ifndef TEST_HEADER_FILE
#define TEST_HEADER_FILE
#include <stdlib.h>
#include <string.h>
char * show_site(); 
#endif

增加hello.c文件。代码如下:

#include "hello.h"
char * show_site()
{
  char *site = malloc(15 * sizeof(char));
  strcpy(site, "www.bo56.com");
  return site;
}

然后使用以下命令生成lib库(动态库)文件:

$ gcc -g -O0 -fPIC -shared -o hello.so ./hello.c

这样在当前目录下就会生成一个hello.so的动态库文件。不同操作系统动态库的扩展名可能不一样。如 windows下是dll,mac下是 dylib,linux下是so。

然后把hello.so拷贝到/usr/local/lib/目录下,命名为hello.so
hello.h拷贝到/usr/local/include/目录下。

修改config.m4文件

增加扩展对动态库的依赖。主要增加以下几行代码:

PHP_ADD_LIBRARY_WITH_PATH(hello, /usr/local/lib/, SAY_SHARED_LIBADD)
PHP_SUBST(SAY_SHARED_LIBADD)

编写扩展代码

增加hello.h的引用。

#include "php_say.h"
#include <stdio.h>
//下面这行是增加的
#include "hello.h"

增加show_site()方法。代码如下:

PHP_FUNCTION(show_site)
{
  char *site = show_site();
  RETVAL_STRING(site);
  free(site);
  return;
}

php调用结果

<?php
$result = show_site();
var_dump($result);
?>

执行结果

$php ./test.php
string(12) "www.bo56.com"

代码解读

PHP_ADD_LIBRARY_WITH_PATH 是用于指定lib库的名字,地址等信息。第一个参数是名字,第二个参数是地址。

在say.c文件中增加lib库的头文件。使用#include "hello.h"

在扩展代码中就像调用其他内核提供的方法一样,去调用lib库中的方法。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于mysql的论坛(2)
Oct 09 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
php/js获取客户端mac地址的实现代码
Jul 08 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
php利用事务处理转账问题
Apr 22 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
php将html转为图片的实现方法
May 19 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
asp.net和php的区别点总结
Oct 10 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 #PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 #PHP
详解PHP序列化和反序列化原理
Jan 15 #PHP
PHP使用两个栈实现队列功能的方法
Jan 15 #PHP
php获取ajax的headers方法与内容实例
Dec 27 #PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 #PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 #PHP
You might like
PHP Memcached应用实现代码
2010/02/08 PHP
php实现cookie加密的方法
2015/03/10 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
jQuery事件对象总结
2016/10/17 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
python调用java的Webservice示例
2014/03/10 Python
python计算auc指标实例
2017/07/13 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
汽车促销活动方案
2014/03/31 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
2014年科研工作总结
2014/12/03 职场文书
三八妇女节寄语
2015/02/27 职场文书
行政处罚事先告知书
2015/07/01 职场文书
治庸问责工作总结
2015/08/11 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
python tkinter实现定时关机
2021/04/21 Python