用ext_skel,实现一个PHP扩展,添加到PHP并调用
http://www.shinrun.com/PHP
一、開始之前
1. 系統(tǒng)環(huán)境:FreeBSD 8.2
2. AP環(huán)境:即已經(jīng)裝好的Apache2.2.17、PHP5.3.8環(huán)境
3. PHP源碼:下載穩(wěn)定版本源碼到當(dāng)前用戶的目錄,如,下載PHP 5.3.8到/usr/home/abc下。
4. 其它要求(如果你要編譯整個PHP):autoconf版本為2.13或2.59;
二、解壓php源碼包,閱讀README.EXT_SKEL
1. 將下載下來的PHP源碼包,解壓。
2. 進(jìn)入到源碼包,打開README.EXT_SKEL
如果,看到里面的詳細(xì)說明,如果你已領(lǐng)會,那么就不用往下看了,趕緊自己開始吧。
三、根據(jù)README所提供的信息創(chuàng)建預(yù)定義文件和擴(kuò)展的開發(fā)框架包
1. 在/usr/home/abc/下,新建一個phpext.skel文件(隨自己的需要定義)。
? ? ? 內(nèi)容如下:
| 1 | string getext(string str) |
? ? ? 編輯后保存。
? ? ? 注意:后面沒有分號,這里只是我們自己提前將要定義的函數(shù)寫在了一個文件里,為之后給--proto傳參用,如果你熟練了這并不是必須步驟。
2. 進(jìn)入到PHP源碼包,即php-5.3.8/ext/內(nèi)。你能看到有兩個帶ext_前綴的文件ext_skel、ext_skel_win32.php。運行ext_skel創(chuàng)建擴(kuò)展的開發(fā)包,如下:
| 1 | localhost$ ./ext_skel --extname=phpext --proto=/usr/home/abc/phpext.skel |
之后將在php-5.3.8/ext/內(nèi)生成文件夾名為phpext的擴(kuò)展默認(rèn)開發(fā)框架包,文件夾內(nèi)包含下面內(nèi)容:
四、修改phpext文件內(nèi),config.m4、php_phpext.h、phpext.c三個文件
1. 修改config.m4文件,如圖所示:
即,注釋掉PHP_ARG_WITH或PHP_ARG_ENABLE(根據(jù)實際情況二選一,第一種是指擴(kuò)展需第三方庫支持)。
2. 修改php_phpext.h文件,如圖所示:
即,注釋掉默認(rèn)聲明的PHP函數(shù),添加一個我們自己定義的PHP函數(shù)getext。
3. 修改phpext.c文件,如圖所示:
即,先將getext注冊到phpext_functions[]中,然后定義并實現(xiàn)getext函數(shù)。
另,生成的文件,也有php文件,可根據(jù)自己的需要進(jìn)行測試等。
五、配置、編譯、安裝phpext
1. 用phpize創(chuàng)建配置,在phpext下運行:
#?/usr/local/bin/phpize #./configure --with-php-config=/usr/local/bin/php-config#./configure |
2. 編譯并安裝phpext擴(kuò)展到/usr/local/lib/php/內(nèi)
#?make#?make test#?make install clean |
3. 如果一切正常,在/usr/local/lib/php/下對應(yīng)的文件夾內(nèi)將多出一個叫phpext.so的文件
此時擴(kuò)展已成功完成。
六、將擴(kuò)展加載到PHP的php.ini或extensions.ini中
1. 把找到php.ini或extensions.ini,在其中加入一行,類似下圖:
2. 重啟apache服務(wù)器。
七、創(chuàng)建phpinfo文件查看是否成功加載phpext擴(kuò)展
1. 在apache的WEB所指根目錄下創(chuàng)建php文件,輸出phpinfo信息,如:
<?php
//info.php phpinfo();
?>
瀏覽器訪問可看到phpext擴(kuò)展已成功加載。
2. 創(chuàng)建PHP測試程序并調(diào)用phpext中g(shù)etext函數(shù)
<?php
//test.php echo getext("This is a php extension");
?>
瀏覽器訪問可看到頁面輸出
完
總結(jié)
以上是生活随笔為你收集整理的用ext_skel,实现一个PHP扩展,添加到PHP并调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。