国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

怎么寫php的擴展

2020-03-22 18:15:52
字體:
來源:轉載
供稿:網友
為什么要用C擴展

C是靜態編譯的,執行效率比PHP代碼高很多。同樣的運算代碼,使用C來開發,性能會比PHP要提升數百倍。IO操作如CURL,因為耗時主要在IOWait上,C擴展沒有明顯優勢。

另外C擴展是在進程啟動時加載的,PHP代碼只能操作Request生命周期的數據,C擴展可操作的范圍更廣。

推薦課程:PHP教程。

第一步

下載PHP的源代碼,如php-5.4.16。解壓后進入php-5.4.16/ext目錄。輸入 ./ext_skel –extname=myext,myext就是擴展的名稱,執行后生成myext目錄。

ext_skel是PHP官方提供的用于生成php擴展骨架代碼的工具。

cd myext。可以看到php_myext.h、myext.c、config.m4等幾個文件。config.m4是AutoConf工具的配置文件,用來修改各種編譯選項。

第二步

修改config.m4,將

dnl PHP_ARG_WITH(myext, for myext support,dnl Make sure that the comment is aligned:dnl [  --with-myext             Include myext support])

修改為

PHP_ARG_WITH(myext, for myext support,[  --with-myext             Include myext support])

下邊還有一個 –enable-myext,是表示編譯到php內核中。with是作為動態鏈接庫載入的。

第三步

修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 這里就是擴展函數聲明部分,可以增加一行 PHP_FUNCTION(myext_helloworld); 表示聲明了一個myext_helloworld的擴展函數。

然后修改myext.c,這個是擴展函數的實現部分。

const zend_function_entry myext_functions[] = {        PHP_FE(confirm_myext_compiled,  NULL)           /* For testing, remove later. */        PHP_FE(myext_helloworld,  NULL)        PHP_FE_END      /* Must be the last line in myext_functions[] */};

這的代碼是將函數指針注冊到Zend引擎,增加一行PHP_FE(myext_helloworld, NULL)(后面不要帶分號)。

第四步

在myext.c末尾加myext_helloworld的執行代碼。

PHP_FUNCTION(myext_helloworld){        char *arg = NULL;int arg_len, len;char *strg;if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {return;}php_printf("Hello World!/n");RETRUN_TRUE;}

zend_parse_parameters是用來接受PHP傳入的參數,RETURN_XXX宏是用來返回給PHP數據。

第五步

在myext目錄下依次執行phpize、./configure 、make、make install。然后修改php.ini加入extension=myext.so

執行php -r “myext_helloworld(‘test’);”,輸出hello world!

以上就是怎么寫php的擴展的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新干县| 灵武市| 吴忠市| 阿坝县| 铜鼓县| 阳东县| 青河县| 佛坪县| 望城县| 广安市| 宁强县| 琼结县| 梧州市| 雅安市| 镇赉县| 南川市| 通化县| 昌吉市| 堆龙德庆县| 南宫市| 綦江县| 海晏县| 镇巴县| 兴和县| 内黄县| 盐源县| 平顶山市| 海晏县| 荥阳市| 怀集县| 石河子市| 仁怀市| 延寿县| 福州市| 青浦区| 眉山市| 泊头市| 江孜县| 八宿县| 托克逊县| 哈密市|