在linux上進行php開發擴展

運行環境:


我在服務器上曾經配過lamp,php版本爲5.3.10,可在ubuntu上配置的php不是php源碼,所以需要再下載一版源碼,下載地址是 http://cn2.php.net/distributions/php-5.3.28.tar.bz2 (注:此版本雖爲5.3.28,個人猜測只要大版本號不變,編譯出的擴展是可以兼容的


下載完成後安裝:

tar -jxvf 源碼包名稱

找到安裝路徑下的ext文件夾,這裏有很多常用的擴展源碼,還有一個ext_skel的腳本程序,用來在Unix環境下生成擴展骨架



我們爲新擴展命名爲okok,使用ext_skel創建骨架:

./ext_skel --extname=okok

我們發現在ext文件夾下多了一個叫okok的文件夾,進入後有三個文件需要我們修改(config.m4, okok.c, php_okok.h):


1>config.m4

打開後注意這裏

這是修改後的結果,修改前紅框中的內容都被dnl註釋掉了,註釋說的很清楚,如果我們的擴展需要使用外部組件,則使用。。。否則使用。。。 所以這裏選擇第二種方式,把註釋去掉,保存


2>okok.c

打開後找到

PHP_FE(confirm_okok_compiled, NULL)這是腳本自動生成的一個函數,後面有與之對應的函數體,這裏我們可以添加多個自定義的函數,爲了演示我們修改原confirm_okok_compiled爲okok,然後在此文件中找到PHP_FUNCTION(comfirm_okok_compiled),修改爲PHP_FUNCTION(okok) ,這裏的對應關係大家應該不難明白,函數體裏可以自定義方法,本文不涉及實現問題,我們不對函數體做修改(這裏有編寫好的測試代碼),保存


3>php_okok.h

這是很容易忽略的一步,打開找到PHP_FUNCTION(comfirm_okok_compiled),修改爲PHP_FUNCTION(okok),如果添加新的函數則對應添加


回到okok目錄下,開始編譯

1>/usr/bin/phpize

2>./configure

3>make

4>make install


這時,在 /usr/lib/php5/20090626 目錄下,生成了okok.so擴展文件,引用擴展就不再贅述了



-------------------------------------------------------------------------------------------------------


做了一個小實驗,想知道當自己寫的擴展函數如果與php自身或其他擴展的函數名相同時會發生什麼,結果編寫了一個phpinfo()的自定義函數,重啓Apache失敗,靜態頁也無法打開




發佈了31 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章