• 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字符串:

    1 PHP_ARG_ENABLE(zzbbloom, whether to enable zzbbloom support,
    2     [  --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

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

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

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

    第五步: 测试

    1 var_dump(get_loaded_extensions());
    2 var_dump(get_extension_funcs('zzbbloom'));
    3 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

  • 相关阅读:
    在HTML文件中加载js
    HTML表单的问题
    HTML自动换行的问题
    HTML的结束标签问题
    数据库基本知识
    PHP中数据库的连接
    2014年7月
    3.2版本视频讲解知识点
    2014年7月
    选项卡
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/4301452.html
Copyright © 2020-2023  润新知