php的擴(kuò)展寫(xiě)法是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到文安網(wǎng)站設(shè)計(jì)與文安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋文安地區(qū)。
為什么要用C擴(kuò)展
C是靜態(tài)編譯的,執(zhí)行效率比PHP代碼高很多。同樣的運(yùn)算代碼,使用C來(lái)開(kāi)發(fā),性能會(huì)比PHP要提升數(shù)百倍。IO操作如CURL,因?yàn)楹臅r(shí)主要在IOWait上,C擴(kuò)展沒(méi)有明顯優(yōu)勢(shì)。
另外C擴(kuò)展是在進(jìn)程啟動(dòng)時(shí)加載的,PHP代碼只能操作Request生命周期的數(shù)據(jù),C擴(kuò)展可操作的范圍更廣。
第一步
下載PHP的源代碼,如php-5.4.16。解壓后進(jìn)入php-5.4.16\ext目錄。輸入 ./ext_skel –extname=myext,myext就是擴(kuò)展的名稱(chēng),執(zhí)行后生成myext目錄。
ext_skel是PHP官方提供的用于生成php擴(kuò)展骨架代碼的工具。
cd myext??梢钥吹絧hp_myext.h、myext.c、config.m4等幾個(gè)文件。config.m4是AutoConf工具的配置文件,用來(lái)修改各種編譯選項(xiàng)。
第二步
修改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])
下邊還有一個(gè) –enable-myext,是表示編譯到php內(nèi)核中。with是作為動(dòng)態(tài)鏈接庫(kù)載入的。
第三步
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 這里就是擴(kuò)展函數(shù)聲明部分,可以增加一行 PHP_FUNCTION(myext_helloworld); 表示聲明了一個(gè)myext_helloworld的擴(kuò)展函數(shù)。
然后修改myext.c,這個(gè)是擴(kuò)展函數(shù)的實(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ù)指針注冊(cè)到Zend引擎,增加一行PHP_FE(myext_helloworld, NULL)(后面不要帶分號(hào))。
第四步
在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是用來(lái)接受PHP傳入的參數(shù),RETURN_XXX宏是用來(lái)返回給PHP數(shù)據(jù)。
第五步
在myext目錄下依次執(zhí)行phpize、./configure 、make、make install。然后修改php.ini加入extension=myext.so
執(zhí)行php -r “myext_helloworld(‘test');”,輸出hello world!
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)站題目:php的擴(kuò)展寫(xiě)法是怎樣的
URL地址:http://jinyejixie.com/article30/johppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、企業(yè)建站、品牌網(wǎng)站建設(shè)、外貿(mào)建站、面包屑導(dǎo)航、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)