php的擴展寫法是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到文安網站設計與文安網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站設計、網站制作、企業官網、英文網站、手機端網站、網站推廣、域名注冊、網站空間、企業郵箱。業務覆蓋文安地區。
為什么要用C擴展
C是靜態編譯的,執行效率比PHP代碼高很多。同樣的運算代碼,使用C來開發,性能會比PHP要提升數百倍。IO操作如CURL,因為耗時主要在IOWait上,C擴展沒有明顯優勢。
另外C擴展是在進程啟動時加載的,PHP代碼只能操作Request生命周期的數據,C擴展可操作的范圍更廣。
第一步
下載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的擴展寫法是怎樣的
URL地址:http://www.2m8n56k.cn/article30/johppo.html
成都網站建設公司_創新互聯,為您提供做網站、企業建站、品牌網站建設、外貿建站、面包屑導航、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯