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

如何用C語言編寫PHP擴(kuò)展的詳解

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

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

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

執(zhí)行命令,生成對應(yīng)擴(kuò)展目錄
#./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

復(fù)制代碼 代碼如下:

/* {{{ 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:生成擴(kuò)展庫
#cd ./caleng_module
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install



6:到php的對應(yīng)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增加擴(kuò)展信息
extension=caleng_module.so
 
8:重啟Apache
# /usr/local/apache2/bin/apachectl restart

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

10:PHP調(diào)用

復(fù)制代碼 代碼如下:

echo a(1,2);

輸出 3  就說明成功了!
=================================
下面是原文
Linux下用C開發(fā)PHP擴(kuò)展
一、首先下載PHP源碼包,假設(shè)源碼包目錄為:/software/php-5.2.13
一、首先下載PHP源碼包,假設(shè)源碼包目錄為:/software/php-5.2.13
#> cd /software/php-5.2.13/ext
二、假設(shè)我們要開發(fā)一個名為caleng_module的擴(kuò)展,該擴(kuò)展包含兩個函數(shù):a--處理兩個整型相加和b-處理字符串重復(fù)輸出;
1、首先編寫一個函數(shù)定義文件,該文件編寫函數(shù)原型后綴為def,假設(shè)為:caleng_module.def
int a(int x, int y)
string b(string str, int n)
2、通過擴(kuò)展骨架生成器,將在ext目錄下自動建立擴(kuò)展目錄caleng_module
#> ./ext_skel --extname=caleng_module --proto=caleng_module.def
3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,將如下行的注釋標(biāo)簽"dnl"去掉,修改后如下所示:
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
Make sure that the comment is aligned:
[  --enable-myfunctions           Enable myfunctions support])
4、完善函數(shù)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);
}
三、編譯安裝,假設(shè)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
現(xiàn)在將在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目錄下生成caleng_module.so文件
在php.ini配置文件中加入: extension=caleng_module.so.
搞定收工

相關(guān)文章

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

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

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

    PHP常見字符串操作函數(shù)與用法總結(jié)

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

    PHP中返回引用類型的方法

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

    PHP MSSQL 存儲過程的方法

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

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

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

    PHP 地址欄信息的獲取代碼

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

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

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

    php簡單實現(xiàn)批量上傳圖片的方法

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

    php中eval函數(shù)的危害與正確禁用方法

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

    QueryPath PHP 中的jQuery

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

最新評論

齐河县| 应用必备| 四会市| 林西县| 伊金霍洛旗| 新营市| 西丰县| 湄潭县| 衡东县| 乌兰浩特市| 凤阳县| 印江| 大丰市| 乌兰县| 峨山| 闸北区| 肇州县| 汶川县| 从江县| 西和县| 西乌珠穆沁旗| 天台县| 壤塘县| 黔东| 榆树市| 姚安县| 敦煌市| 吴旗县| 科技| 广州市| 顺昌县| 灯塔市| 民勤县| 拉萨市| 甘南县| 碌曲县| 来宾市| 丰县| 读书| 揭东县| 清河县|