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的FTP学习(一)[转自奥索]
Oct 09 PHP
谈谈PHP语法(4)
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
PHP 实用代码收集
Jan 22 PHP
php header示例代码(推荐)
Sep 08 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
php支持断点续传、分块下载的类
May 02 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 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的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
关于python的list相关知识(推荐)
2017/08/30 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Django权限设置及验证方式
2020/05/13 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
PyTorch的torch.cat用法
2020/06/28 Python
ASP.NET Core中的配置详解
2021/02/05 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
最新茶叶店创业计划书
2014/01/14 职场文书
活动总结模板
2014/05/09 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
付款承诺函范文
2015/01/21 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
基于Redis的List实现特价商品列表功能
2021/08/30 Redis