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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
php+javascript的日历控件
Nov 19 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
最常用的8款PHP调试工具
Jul 06 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
利用php输出不同的心形图案
Apr 22 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
YII框架模块化处理操作示例
Apr 26 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中Object对象的笔记分享
2011/06/28 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
javascript中Object使用详解
2015/01/26 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
以下的初始化有什么区别
2013/12/16 面试题
Exception类的常用方法
2012/06/16 面试题
机械设计制造专业个人求职信
2013/09/25 职场文书
电信专业应届生自荐信
2013/09/28 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
出国签证在职证明
2014/01/16 职场文书
检讨书格式
2015/05/07 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫