天天看點

php擴充開發初探

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&amp;catname=Structures" target="_blank">http://www.pecl.php.net/packages.php?catpid=27&amp;catname=Structures</a>