程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 5.6版本中編寫一個PHP擴展的簡單示例

php 5.6版本中編寫一個PHP擴展的簡單示例

編輯:關於PHP編程

     這篇文章主要介紹了php 5.6版本中編寫一個PHP擴展的簡單示例,本文給出擴展實現代碼、編譯方法、配置方法和使用例子等內容,需要的朋友可以參考下

       

    有時候在php本身沒有滿足需求的api時候,需要自己寫相應的擴展,擴展寫完之後進行編譯,即可加入自己的開發環境中,擴展php的功能。

    這裡實現一個連接字符串和int型數的連接操作的簡單擴展。

    首先,下載最新的php源碼安裝包,進入ext/目錄,新建extstrcat.def:

    代碼如下:
    string extstrcat(string strarg, int intarg)
    隨後運行:
    代碼如下:
    ./ext_skel --extname=extstrcat --proto=extstrcat.def
    修改ext/extstrcat/config.m4,去掉如下行前面的注釋(dnl):
    代碼如下:
    PHP_ARG_ENABLE(extstrcat, whether to enable extstrcat support,
    Make sure that the comment is aligned:
    [ --enable-extstrcat Enable extstrcat support])

     

    此時來編輯ext/extstrcat/extstrcat.c,找到PHP_FUNCTION(extstrcat)函數,這裡表示擴展中的方法名為extstrcat,方法實現如下:

    代碼如下:
    PHP_FUNCTION(extstrcat)
    {
    char *strarg = NULL;
    int argc = ZEND_NUM_ARGS();
    int strarg_len;
    long intarg;

    char intargstr[10];
    int retstrlen = 0;
    char *retstr = NULL;

    if (zend_parse_parameters(argc TSRMLS_CC, "sl", &strarg, &strarg_len, &intarg) == FAILURE)
    return;

    snprintf(intargstr, 9, "%d", intarg);
    retstrlen = strarg_len + strlen(intargstr) + 1;
    retstr = (char *)malloc(sizeof(char)* retstrlen);
    memset(retstr, '', retstrlen);
    strncat(retstr, strarg, strlen(strarg));
    strncat(retstr, intargstr, strlen(intargstr));
    RETURN_STRING(retstr, 1);

    php_error(E_WARNING, "extstract: not yet implemented");
    }

     

    ,其中strarg和intarg即為對應的兩個字符串和整型參數。
    接下來要做的事情就是編譯擴展,

    代碼如下:
    phpize
    ./configure --enable-extstrcat
    make
    編譯成功之後,在ext/modules目錄下會生成extstrcat.so文件,

     

     

    代碼如下:
    cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/

     

    修改php.ini,增加extension = extstrcat.so。
    重啟php-fpm,運行phpinfo()可以看到新增了extstrcat擴展。
    現在來寫一個Demo,測試一下剛剛的php擴展,

    代碼如下:
    <?php
    if(!extension_loaded('extstrcat')) {
    dl('extstrcat.' . PHP_SHLIB_SUFFIX);
    }
    $ret=extstrcat('testarg',1234);
    echo $ret;
    ?>
    ,命令行下運行該文件,得到testarg1234.
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved