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 相关文章推荐
随机广告显示(PHP函数)
Oct 09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
twig里使用js变量的方法
Feb 05 PHP
PHP缓冲区用法总结
Feb 14 PHP
Symfony2创建页面实例详解
Mar 18 PHP
php简单实现多语言切换的方法
May 09 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP时间类完整代码实例
Feb 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写的简易聊天室代码
2011/06/04 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
用Python编写web API的教程
2015/04/30 Python
Python selenium如何设置等待时间
2016/09/15 Python
Python测试线程应用程序过程解析
2019/12/31 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
农村面貌改造提升实施方案
2014/03/18 职场文书
目标责任书范文
2014/04/14 职场文书
个人担保书范文
2014/05/20 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
机关作风建设自查报告
2014/10/22 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers