2015年2月26日 15:44:41

原因: 想用PHP实现一个布隆过滤器算法, 其中要用到位运算, 但是PHP的内置的int类型不给力, 不能支持大整数的位运算

数据一旦太大, 就会变为浮点数表示, 浮点数无法参与位运算... 也试过nodejs, redis 都不行. 用java吧, 还得搭环境

就想用PHP扩展的方式,用c去实现

第一步: 用PHP命令去自动生成扩展框架

进入到PHP的源代码目录->进入ext 目录下

./ext_skel --extname=zzbbloom

第二步: 修改框架, 添加自己的函数代码

上一步生成的框架实际上是一个名字为zzbbloom的文件夹, 在/path/to/php/src/ext/zzbbloom/, 进入该文件夹

1) 编辑config.m4文件(文件每一行开始的'dnl' 是注释符), 找到 PHP_ARG_ENABLE(zzbbloom, ..... 这几行, 去掉前边的dnl字符串:

 PHP_ARG_ENABLE(zzbbloom, whether to enable zzbbloom support,
[ --enable-zzbbloom Enable zzbbloom support])

设置编译PHP时, 是用 --with-xxxx 参数编译进PHP扩展, 还是用 --enable-xxxx

2) 编辑zzbbloom.h zzbbloom.c 文件添加自己的函数(也可以用框架自动生成的函数, confirm_zzbbloom_compiled())

  参考: http://www.jb51.net/article/16791.htm  http://www.open-open.com/lib/view/open1340585955030.html

第三步: 编译

先进入到生成的框架目录里边, 然后执行phpize命令, 然后执行 ./configure命令, 最后 make, make install

 cd path/to/php/srccode/ext/zzbbloom/
/usr/local/php/bin/phpize //这个命令会生成 configure makefile等文件
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

第四步: 重启php-fpm(不用重启nginx)

参考: http://www.cnblogs.com/iLoveMyD/p/4301429.html

第五步: 测试

 var_dump(get_loaded_extensions());
var_dump(get_extension_funcs('zzbbloom'));
echo confirm_zzbbloom_compiled('我的第一个PHP扩展,哈哈哈哈');

其它参考:

http://www.walu.cc/phpbook/5.1.md PHP扩展开发与内核应用

另: pecl里已经有人实现了布隆过滤器

http://www.pecl.php.net/packages.php?catpid=27&catname=Structures

php扩展开发初探的更多相关文章

  1. PHP 扩展开发初探

    什么是 PHP 扩展 通俗说,PHP 扩展是增强 PHP 语言功能的插件.PHP 提供了编程语言的语法,比如分支.循环.函数.类等,这些是 PHP 本身所提供的.在某些情况下需要在 PHP 语言的基础 ...

  2. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  3. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  4. PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)

    今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...

  5. 关于PHP扩展开发(收藏)

    一.Linux shell命令: ls –lh    查看文件大小 du –a    查看文件及文件夹大小 -------------------------- nginx ------------- ...

  6. postgres扩展开发

    扩展开发的基本组成 demo--1.0.sql demo.c demo.control Makefile demo.c当中包含了自定义函数的实现,纯C语言,目录下可包含多个.c文件.demo-1.0. ...

  7. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

  8. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  9. PHP扩展开发相关总结

    1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...

随机推荐

  1. Spring-MVC流程图

    Spring MVC工作流程图 图一 图二  Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获:   ...

  2. Java String是不可变对象

    基本数据类型和String类型都是值传递,数组,对象等是引用传递 经多方面查找,String很奇特,虽然是引用数据类型,但是采用的却是值传递!!!基本数据类型采用的都是值传递,数组和对象都是引用传递( ...

  3. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  4. TOJ3540Consumer(有依赖的背包)

    http://acm.tju.edu.cn/toj/showp3540.html3540.   Consumer Time Limit: 2.0 Seconds   Memory Limit: 655 ...

  5. eclipse错误:Unable to read workbench state. Workbench UI layout will be reset.XML document structures

    Unable to read workbench state. Workbench UI layout will be reset.XML document structures must start ...

  6. iOS系统navigationBar背景色,文字颜色处理

    - (void)setRightBarButtonItem { // Create done Button UIBarButtonItem *doneButton = [[UIBarButtonIte ...

  7. 我在 impress.js 中学到的小套路

    我在 impress.js 中学到的小套路 写在开篇 作为了一个自学 JavaScript 才一个月的新手,前几天“妄图”研究 jQuery-3.1.0 源码,结果自然是被虐得死去活来.机缘巧合之下, ...

  8. 如何在word里面插入目录

    点击“引用”->插入目录

  9. C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

    1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局 ...

  10. Valid Pattern Lock(dfs + 暴力)

    Valid Pattern Lock Time Limit: 2 Seconds      Memory Limit: 65536 KB Pattern lock security is genera ...