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