最近在公司作的事情就是php擴展開發,雖然我只負責c++代碼的編寫,可是瞭解擴展開發的流程仍是頗有必要的。php
(本文介紹的是動態擴展,對靜態擴展有興趣的讀者可自行google)html
php擴展開發環境搭建可參考:nginx
假設咱們須要增長一個函數echodemo_string,對應的php代碼以下:c++
function echodemo_string($param) { $result = "your input is $param"; return $result; }
1. 建立擴展框架vim
這裏要用到一個工具:ext_skel,它位於php源碼目錄的ext目錄下。框架
假設擴展的名字爲echodemo。函數
首先進入ext目錄,php-fpm
建立文件echodemo.skel,編輯文件內容工具
string echodemo_string(string param)
而後執行:post
./ext_skel --extname=echodemo --proto=echodemo.skel
執行完畢會生成 echodemo 目錄,目錄包含以下內容:
2. 修改配置
打開config.m4,將第十、十一、12行前面的dnl去掉,dnl表示註釋。
3. 實現功能
打開echodemo.c,echodemo_string函數定義以下:
修改該函數實現咱們須要的功能,最終實現以下:
(vim主題太醜了,我得換換。。。)
4. 編譯安裝擴展
這裏須要用到phpize生成configure文件,在個人機器上,phpize位於/usr/local/php/bin目錄。
phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install
當出現 "Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/",表示新的擴展 echodemo.so 已經安裝完成。
此時還須要作的一件事就是修改 php.ini 文件。
不知道 php.ini 文件在哪?直接 php -i | grep php.ini 。個人在 /usr/local/php/lib 目錄下。
文件末尾追加一行:
extension=echodemo.so
5. 驗證安裝
重啓php-fpm:service php-fpm restart,
檢查擴展是否加載:
php -m | grep echodemo
若是順利,終端會輸出 echodemo。
檢查擴展代碼是否正確:
php -r "echo echodemo_string('hello world');"
注意,我外部用的雙引號,函數參數用的單引號,這是爲了不一些轉義錯誤。
參考資料:
最後配張圖: