php擴充套件開發初探

myDCool發表於2015-02-26

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


相關文章