php扩展开发初探
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扩展开发初探的更多相关文章
- PHP 扩展开发初探
什么是 PHP 扩展 通俗说,PHP 扩展是增强 PHP 语言功能的插件.PHP 提供了编程语言的语法,比如分支.循环.函数.类等,这些是 PHP 本身所提供的.在某些情况下需要在 PHP 语言的基础 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)
今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...
- 关于PHP扩展开发(收藏)
一.Linux shell命令: ls –lh 查看文件大小 du –a 查看文件及文件夹大小 -------------------------- nginx ------------- ...
- postgres扩展开发
扩展开发的基本组成 demo--1.0.sql demo.c demo.control Makefile demo.c当中包含了自定义函数的实现,纯C语言,目录下可包含多个.c文件.demo-1.0. ...
- 【转发】NPAPI学习(Firefox和Chrome扩展开发 )
NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- PHP扩展开发相关总结
1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...
随机推荐
- UVA5874 Social Holidaying 二分匹配
二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...
- tarjan算法--求无向图的割点和桥
一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 2.割点:无向连通图中 ...
- 【HDU 1003】 Max Sum
题 题意 需要在o(n)时间内,求最大连续的子序列的和,及其起点和终点. 分析 一种方法是一边读,一边维护最小的前缀和 s[i] ,然后不断更新 ans = max(ans,s[j] - s[i]), ...
- visual studio各个版本的差异
- codevs1322 单词矩阵
题目描述 Description 对于包含字母A到Y各一次的单词S,将其从上到下从左到右写在一个5*5的矩阵中,如单词ADJPTBEKQUCGLRVFINSWHMOXY写出来如下: A D J P T ...
- POJ1067 取石子游戏
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- myeclipse 引入jar包 (包括 jdbc 驱动引用)
A.直接用MyEclipse里自带的相关的项目jar包,右击项目"MyEclipse"菜单,选择对应的jar包就OK了 B.添加外部的jar包到web项目的lib包下,右击项目&q ...
- C++ STL之stack
因为总用vector,却忘记了有stack,今天用到栈顶的值才想起来,说起来stack很方便,也很容易用,看下边例子: #include<stack> #include<iostre ...
- 优秀大数据GitHub项目一览
http://blog.csdn.net/yaoxtao/article/details/50540485 优秀大数据GitHub项目一览 VMware CEO Pat Gelsinger曾说: 数据 ...
- P、NP、NPC、NP-Hard问题
转自:http://www.matrix67.com/blog/archives/105 总结 P:能用多项式时间求解的问题NP:能用多项式时间验证的问题(但不知道能不能用多项式时间求解).存在不属于 ...