最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用C語言編寫PHP擴展的詳解

 更新時間:2013年06月13日 11:46:04   作者:  
本篇文章是對用C語言編寫PHP擴展進行了詳細的分析介紹,需要的朋友參考下

1:預定義
在home目錄,也可以其他任意目錄,寫一個文件,例如caleng_module.def
內容是你希望定義的函數名以及參數:
int a(int x,int y)
string b(string str,int n)

2:到php源碼目錄的ext目錄
#cd /usr/local/php-5.4.0/ext/

執(zhí)行命令,生成對應擴展目錄
#./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def

3:修改config.m4
去掉dnl的注釋

PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,
Make sure that the comment is aligned:
[  --enable-caleng_module           Enable caleng_module support])

4:修改caleng_module.c

復制代碼 代碼如下:

/* {{{ proto int a(int x, int y)
    */
PHP_FUNCTION(a)
{
 int argc = ZEND_NUM_ARGS();
 int x;
 int y;
    int z;
 if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)

  return;
z=x+y;
  RETURN_LONG(z);
}
/* }}} */
/* {{{ proto string b(string str, int n)
    */
PHP_FUNCTION(b)
{
 char *str = NULL;
    int argc = ZEND_NUM_ARGS();
    int str_len;
    long n;
    char *result;
    char *ptr;
    int result_length;

    if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
        return;
    result_length = str_len * n;
    result = (char *) emalloc(result_length + 1);
    ptr = result;
    while (n--) {
        memcpy(ptr, str, str_len);
        ptr += str_len;
    }
    *ptr = '\0';
    RETURN_STRINGL(result, result_length, 0);
}
/* }}} */

5:生成擴展庫
#cd ./caleng_module
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install



6:到php的對應extensions目錄
如上圖所示
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
改目錄下有生成的caleng_module.so文件

7:修改php.ini
php.ini如果找不到可以從phpinfo()打出的信息看到
#cd /usr/local/php/lib/
php.ini增加擴展信息
extension=caleng_module.so
 
8:重啟Apache
# /usr/local/apache2/bin/apachectl restart

9:檢查加載
 /usr/local/php/bin/php -m

10:PHP調用

復制代碼 代碼如下:

echo a(1,2);

輸出 3  就說明成功了!
=================================
下面是原文
Linux下用C開發(fā)PHP擴展
一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13
一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13
#> cd /software/php-5.2.13/ext
二、假設我們要開發(fā)一個名為caleng_module的擴展,該擴展包含兩個函數:a--處理兩個整型相加和b-處理字符串重復輸出;
1、首先編寫一個函數定義文件,該文件編寫函數原型后綴為def,假設為:caleng_module.def
int a(int x, int y)
string b(string str, int n)
2、通過擴展骨架生成器,將在ext目錄下自動建立擴展目錄caleng_module
#> ./ext_skel --extname=caleng_module --proto=caleng_module.def
3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,將如下行的注釋標簽"dnl"去掉,修改后如下所示:
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
Make sure that the comment is aligned:
[  --enable-myfunctions           Enable myfunctions support])
4、完善函數a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.c
PHP_FUNCTION(a)
{
    int x, y, z;

    int argc = ZEND_NUM_ARGS();

    if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
        return;
    z = x + y;
    RETURN_LONG(z);
}
PHP_FUNCTION(b)
{
    char *str = NULL;
    int argc = ZEND_NUM_ARGS();
    int str_len;
    long n;
    char *result;
    char *ptr;
    int result_length;

    if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
        return;
    result_length = str_len * n;
    result = (char *) emalloc(result_length + 1);
    ptr = result;
    while (n--) {
        memcpy(ptr, str, str_len);
        ptr += str_len;
    }
    *ptr = '\0';
    RETURN_STRINGL(result, result_length, 0);
}
三、編譯安裝,假設php的安裝目錄為:/usr/localhost/webserver/php
#> cd /software/php-5.2.13/ext/caleng_module
#> /usr/localhost/webserver/php/bin/phpize
#> ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config
#> make
#> make install
現在將在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目錄下生成caleng_module.so文件
在php.ini配置文件中加入: extension=caleng_module.so.
搞定收工

相關文章

  • php檢查字符串中是否包含7位GSM字符的方法

    php檢查字符串中是否包含7位GSM字符的方法

    這篇文章主要介紹了php檢查字符串中是否包含7位GSM字符的方法,可實現檢測手機短信GSM字符的功能,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • PHP常見字符串操作函數與用法總結

    PHP常見字符串操作函數與用法總結

    這篇文章主要介紹了PHP常見字符串操作函數與用法,結合實例形式總結分析了php針對字符串的格式化、分割、連接、比較等相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • PHP中返回引用類型的方法

    PHP中返回引用類型的方法

    這篇文章主要介紹了PHP中返回引用類型的方法,這是個比較容易混淆的概念,如果不是出于某些特殊的原因,建議還是不要使用,需要的朋友可以參考下
    2015-04-04
  • PHP MSSQL 存儲過程的方法

    PHP MSSQL 存儲過程的方法

    在PHP中調用MS SQL存儲過程的核心代碼
    2008-12-12
  • 深入理解PHP之require/include順序 推薦

    深入理解PHP之require/include順序 推薦

    在大型的Web項目中, include_path是一個模塊化設計的根本中的根本(當然,現在也有很多基于autoload的設計, 這個不影響本文的探討), 但是正是因為include_path, 經常會讓我們遇到一些因為沒有找到正確的文件而導致的看似”詭異”的問題.
    2011-01-01
  • PHP 地址欄信息的獲取代碼

    PHP 地址欄信息的獲取代碼

    主要是獲取到地址欄的一些信息,域名,端口參數等
    2009-01-01
  • PHP頁面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法詳解

    PHP頁面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法詳解

    這篇文章主要介紹了PHP頁面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法,結合實例形式分析了PHP頁面靜態(tài)化——純靜態(tài)與偽靜態(tài)相關原理、實現方法與相關操作注意事項,需要的朋友可以參考下
    2020-06-06
  • php簡單實現批量上傳圖片的方法

    php簡單實現批量上傳圖片的方法

    這篇文章主要介紹了php簡單實現批量上傳圖片的方法,實例分析了php文件傳輸的實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • php中eval函數的危害與正確禁用方法

    php中eval函數的危害與正確禁用方法

    這篇文章主要介紹了php中eval函數的危害與正確禁用方法,需要的朋友可以參考下
    2014-06-06
  • QueryPath PHP 中的jQuery

    QueryPath PHP 中的jQuery

    QueryPath(QP)庫 在 PHP 中實現了類似于 jQuery 的效果,用它還可以方便地處理 XML HTML...功能太強大了?。?!
    2010-04-04

最新評論

宣化县| 宁强县| 马山县| 读书| 娄烦县| 屏边| 西充县| 靖宇县| 洮南市| 凌源市| 和龙市| 石狮市| 兴国县| 上虞市| 兴和县| 山丹县| 北流市| 明溪县| 紫云| 凤冈县| 龙海市| 南开区| 吐鲁番市| 家居| 华坪县| 莱芜市| 汽车| 开江县| 万荣县| 双桥区| 东港市| 射洪县| 泰来县| 皋兰县| 泰宁县| 咸阳市| 南平市| 阿勒泰市| 广昌县| 元阳县| 丽水市|