2015年2月26日 15:44:41
原因: 想用PHP實作一個布隆過濾器算法, 其中要用到位運算, 但是PHP的内置的int類型不給力, 不能支援大整數的位運算
資料一旦太大, 就會變為浮點數表示, 浮點數無法參與位運算... 也試過nodejs, redis 都不行. 用java吧, 還得搭環境
就想用PHP擴充的方式,用c去實作
第一步: 用PHP指令去自動生成擴充架構
進入到PHP的源代碼目錄->進入ext 目錄下
第二步: 修改架構, 添加自己的函數代碼
上一步生成的架構實際上是一個名字為zzbbloom的檔案夾, 在/path/to/php/src/ext/zzbbloom/, 進入該檔案夾
1) 編輯config.m4檔案(檔案每一行開始的'dnl' 是注釋符), 找到 PHP_ARG_ENABLE(zzbbloom, ..... 這幾行, 去掉前邊的dnl字元串:
設定編譯PHP時, 是用 --with-xxxx 參數編譯進PHP擴充, 還是用 --enable-xxxx
2) 編輯zzbbloom.h zzbbloom.c 檔案添加自己的函數(也可以用架構自動生成的函數, confirm_zzbbloom_compiled())
第三步: 編譯
先進入到生成的架構目錄裡邊, 然後執行phpize指令, 然後執行 ./configure指令, 最後 make, make install
第四步: 重新開機php-fpm(不用重新開機nginx)
第五步: 測試
其它參考:
另: pecl裡已經有人實作了布隆過濾器
<a href="http://www.pecl.php.net/packages.php?catpid=27&catname=Structures" target="_blank">http://www.pecl.php.net/packages.php?catpid=27&catname=Structures</a>