php的擴展寫法總結(jié)
為什么要用C擴展
C是靜態(tài)編譯的,執(zhí)行效率比PHP代碼高很多。同樣的運算代碼,使用C來開發(fā),性能會比PHP要提升數(shù)百倍。IO操作如CURL,因為耗時主要在IOWait上,C擴展沒有明顯優(yōu)勢。
另外C擴展是在進程啟動時加載的,PHP代碼只能操作Request生命周期的數(shù)據(jù),C擴展可操作的范圍更廣。
第一步
下載PHP的源代碼,如php-5.4.16。解壓后進入php-5.4.16\ext目錄。輸入 ./ext_skel –extname=myext,myext就是擴展的名稱,執(zhí)行后生成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內(nèi)核中。with是作為動態(tài)鏈接庫載入的。
第三步
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 這里就是擴展函數(shù)聲明部分,可以增加一行 PHP_FUNCTION(myext_helloworld); 表示聲明了一個myext_helloworld的擴展函數(shù)。
然后修改myext.c,這個是擴展函數(shù)的實現(xiàn)部分。
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[] */ };
這的代碼是將函數(shù)指針注冊到Zend引擎,增加一行PHP_FE(myext_helloworld, NULL)(后面不要帶分號)。
第四步
在myext.c末尾加myext_helloworld的執(zhí)行代碼。
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傳入的參數(shù),RETURN_XXX宏是用來返回給PHP數(shù)據(jù)。
第五步
在myext目錄下依次執(zhí)行phpize、./configure 、make、make install。然后修改php.ini加入extension=myext.so
執(zhí)行php -r “myext_helloworld(‘test');”,輸出hello world!
相關(guān)文章
學(xué)習(xí)php設(shè)計模式 php實現(xiàn)建造者模式
這篇文章主要介紹了php設(shè)計模式中的建造者模式,使用php實現(xiàn)建造者模式,感興趣的小伙伴們可以參考一下2015-12-12php實現(xiàn)數(shù)字轉(zhuǎn)億萬單位的示例代碼
這篇文章主要為大家詳細(xì)介紹了php如何實現(xiàn)數(shù)字轉(zhuǎn)億萬單位,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11php代碼調(diào)試?yán)鱢irephp安裝與使用方法分析
這篇文章主要介紹了php代碼調(diào)試?yán)鱢irephp安裝與使用方法,簡單分析了firephp的下載、安裝、測試代碼調(diào)試等使用方法及相關(guān)操作技巧,需要的朋友可以參考下2018-08-08PHP實現(xiàn)將上傳圖片自動縮放到指定分辨率,并保持清晰度封裝類示例
這篇文章主要介紹了PHP實現(xiàn)將上傳圖片自動縮放到指定分辨率,并保持清晰度封裝類,涉及php針對jpeg、png、gif等格式圖片的縮放與輸出相關(guān)操作技巧,需要的朋友可以參考下2019-06-06與文件上傳有關(guān)的php配置參數(shù)總結(jié)
搞個了圖片上傳,死活不好使,后來發(fā)現(xiàn)是php參數(shù)配置的問題,下面總結(jié)下與文件上傳有關(guān)的php參數(shù),有類似情況的朋友可以參考下哈2013-06-06