程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP擴展開發詳細教程

PHP擴展開發詳細教程

編輯:PHP綜合
在幾種情況下,我們會需要進行PHP擴展開發:

1、PHP本身無法訪問的資源或是調用,

2、通過擴展的方式可以實現處於性能和效率的考慮,

3、用C實現會更好

4、處於商業或代碼保護考慮,將代碼封裝起來

5、為了更深入的了解PHP,從這裡入門

假設有這麼一個擴展,提供一個叫ccvita_string的函數。下面詳細介紹怎麼樣制作這樣一個PHP擴展:

第一步、生成代碼

PHP為了擴展開發的方便,提供了一個類似代碼生成器的工具ext_skel,具體可以參見說明。
首先我們創建一個文件52itbc.skel,它的內容為
string 52itbc_string(string str)

就是告訴ext_skel這個東西,我們要做的擴展裡面有個函數叫52itbc_string。然後執行
cd usr/src/php-5.3.8/ext/
./ext_skel --extname=52itbc --proto=52itbc.skel
cd 52itbc/

這時候,ccvita這個擴展的代碼框架就已經出來了。

第二步、修改配置

然後修改config.m4文件將10、11、12三行最前面的dnl刪除掉,就是將
dnl PHP_ARG_WITH(ccvita, for ccvita support,
dnl Make sure that the comment is aligned:
dnl [  --with-52itbc            Include 52itbc support])

修改為
PHP_ARG_WITH(52itbc, for 52itbc support,
Make sure that the comment is aligned:
[  --with-52itbc             Include 52itbc support])

第三步、實現功能

修改源碼52itbc.c文件
找到將52itbc_string這個函數修改為
PHP_FUNCTION(52itbc_string)
{
    char *str = NULL;
    int argc = ZEND_NUM_ARGS();
    int str_len;
    char *result;

    if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE) 
        return;

    str_len = spprintf(&result, 0, "<a href="%.78s">Link</a>", str);
    RETURN_STRINGL(result, str_len, 0); 
}

第四步、編譯擴展

保存後,開始編譯
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make

第五步、添加擴展

這時候,一切順利的話,該擴展已經在modules/52itbc.so這個位置了。下面就是將這個擴展加入到PHP中去,讓我們PHP程序可以調用到。
cp modules/52itbc.so /usr/local/php/ext/
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/ext/52itbc.so #在php.ini文件最後增加這一行
service php-fpm restart #重啟PHP服務
cp ccvita.php /data/www/wwwroot/default/
接下來就可以訪問52itbc.php這個文件,測試擴展了。 *
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved