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 相关文章推荐
source.php查看源文件
Dec 09 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
PHP测试程序运行时间的类
Feb 05 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
PHP中phar包的使用教程
Jun 14 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
php优化查询foreach代码实例讲解
Mar 24 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
php Ajax乱码
2008/04/09 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
php实现购物车功能(下)
2016/01/05 PHP
php封装的smarty类完整实例
2016/10/19 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
如何在Django项目中引入静态文件
2019/07/26 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
华为慧通面试题
2012/09/11 面试题
汽车运用工程毕业生自荐信
2013/10/29 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
拉拉队口号
2014/06/16 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python