国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Windows環(huán)境下PHP動(dòng)態(tài)鏈接庫(kù)開發(fā)研究

2017-06-02 13:16:24聶慶鵬
關(guān)鍵詞:擴(kuò)展

聶慶鵬

摘要:PHP是當(dāng)前應(yīng)用十分廣泛的Web編程語(yǔ)言。雖然PHP為開發(fā)者提供了大量擴(kuò)展函數(shù),但在很多特殊應(yīng)用場(chǎng)合,仍需要自定義開發(fā)擴(kuò)展函數(shù)庫(kù)。當(dāng)前從操作層面完整介紹PHP擴(kuò)展函數(shù)開發(fā)技術(shù)的資料還十分匱乏。本文以Windows平臺(tái)為例,詳細(xì)探究了在VS2008環(huán)境下開發(fā)PHP5.4.X版本的擴(kuò)展函數(shù)(動(dòng)態(tài)鏈接庫(kù))的實(shí)現(xiàn)思路和步驟,并通過(guò)實(shí)踐進(jìn)行了諫言。

關(guān)鍵詞:PHP;動(dòng)態(tài)鏈接庫(kù);擴(kuò)展

中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)04-0207-01

1 引言

PHP(Personal Homepage:HyperText Preprocessor)是一種應(yīng)用十分廣泛的Web編程語(yǔ)言。該語(yǔ)言的一個(gè)重要特點(diǎn)是提供了大量擴(kuò)展函數(shù),幫助開發(fā)者完成常用操作。在Windows平臺(tái)上,這些函數(shù)是以若干個(gè)DLL(Dynamic Link Library,動(dòng)態(tài)鏈接庫(kù))方式提供的。但這些函數(shù)仍不能完全滿足開發(fā)者的個(gè)性化需求。在很多特殊應(yīng)用場(chǎng)合下,需要自行開發(fā)動(dòng)態(tài)鏈接庫(kù),對(duì)PHP進(jìn)行功能擴(kuò)展。但由于PHP的版本眾多,源代碼體系十分復(fù)雜,官方的技術(shù)支持資料又比較缺乏,讓很多開發(fā)者望而卻步。本文以Windows平臺(tái)為例,對(duì)PHP動(dòng)態(tài)鏈接庫(kù)開發(fā)的一般過(guò)程和相關(guān)技術(shù)進(jìn)行了詳細(xì)研究,給出了詳細(xì)步驟和具體操作方法,并通過(guò)實(shí)踐進(jìn)行了驗(yàn)證。

2 開發(fā)思路與過(guò)程

PHP屬于開放源代碼軟件,其源代碼可以在官方網(wǎng)站下載得到。PHP的源代碼使用C語(yǔ)言編寫,需要使用編譯工具進(jìn)行編譯和調(diào)試。因此,需要下載PHP的源代碼文件,使用PHP官方提供的PHP擴(kuò)展開發(fā)模板創(chuàng)建程序“骨架”,使用相應(yīng)版本的C語(yǔ)言開發(fā)環(huán)境進(jìn)行編譯和調(diào)試,最終編譯出所需要的DLL文件。必須指出的是,PHP的版本和編譯器有直接關(guān)系。本文以PHP5.4版本為例,需要搭配Visual Studio 2008(VC9)環(huán)境進(jìn)行調(diào)試和編譯。

2.1 開發(fā)環(huán)境搭建

基本的PHP動(dòng)態(tài)鏈接庫(kù)開發(fā)環(huán)境包括:(1)Visual Studio 2008;(2)PHP5.4.X Windows平臺(tái)二進(jìn)制包。使用IIS作為調(diào)試軟件時(shí),需使用PHP的線程安全(ThreadSafe,TS)版本,如果使用APACHE作為調(diào)試軟件,需使用非線程安全(Non-ThreadSafe,NTS)版本;(3)PHP5.4.45源代碼包;(4)PHP SDK開發(fā)包;(5)與PHP SDK版本對(duì)應(yīng)的deps包;(6)MSys1.0小型GUN環(huán)境工具[1]。

2.2 重新編譯PHP

從官方網(wǎng)站獲取的PHP源代碼和SDK中缺少開發(fā)動(dòng)態(tài)鏈接庫(kù)所必須的config.win32.h,需要通過(guò)對(duì)PHP進(jìn)行重新編譯來(lái)生成。其步驟如下:

(1)創(chuàng)建自定義目錄C:\php_studio\作為工作目錄,以下用%dir%表示本目錄;(2)解壓PHP SDK至 %dir%php_sdk,使用命令行窗口運(yùn)行VS2008安裝路徑下的vcvarsall.bat批處理文件。運(yùn)行后會(huì)輸出運(yùn)行成功的提示。(3)進(jìn)入%dir%php_sdk\bin目錄,分別運(yùn)行批處理文件“phpsdk_setvars.bat”和“phpsdk_buildtree.bat php54dev”,在bin目錄下產(chǎn)生php54dev文件夾。(4)將deps包解壓到 %dir%\php-sdk\php54dev\vc9\x86\目錄,覆蓋掉該目錄下原有的deps目錄;解壓PHP源代碼包到%dir%\php_stdio\php-sdk\php54dev\vc9\x86\,文件夾名為php5445,本文件夾即PHP源代碼的根目錄。(5)使用命令行進(jìn)入PHP源代碼根目錄,運(yùn)行“buildconf”命令。(6)運(yùn)行“configure --disable-all --enable-cli”命令,以最小化方式編譯PHP。命令執(zhí)行后,有一系列輸出,結(jié)尾部分顯示“Type nmake to build PHP”。打開源代碼文件夾的main子文件夾,發(fā)現(xiàn)自動(dòng)創(chuàng)建了config.win32.h,這說(shuō)明PHP編譯成功。

2.3 創(chuàng)建新擴(kuò)展框架

PHP為開發(fā)者提供了動(dòng)態(tài)鏈接庫(kù)文件的框架,運(yùn)行ext_skel_ win32.php可以自動(dòng)創(chuàng)建,為后面的編寫代碼提供基礎(chǔ)[2]。其步驟如下:

(1)命令行下進(jìn)入PHP源代碼目錄下的ext文件夾,其中有ext_skel_win32.php文件,該文件即Windows下創(chuàng)建擴(kuò)展骨架的工具。執(zhí)行“php ext_skel_win32.php --extname=myFunc”命令,其中,myFunc為自定義的擴(kuò)展名稱。運(yùn)行后得到一系列屏幕輸出(略)。(2)打開%dir%\php-sdk\php54dev\vc9\x86\php5445\ext可以看到一個(gè)新建的myFunc文件夾,其中包含若干文件,如myFunc.dsp等,這就是新擴(kuò)展的框架文件,可以直接用VS2008打開進(jìn)行編輯。

2.4 在VS2008中編譯擴(kuò)展

擴(kuò)展框架創(chuàng)建完畢后,需要使用VS2008編輯、編譯項(xiàng)目文件。項(xiàng)目文件默認(rèn)為調(diào)試項(xiàng)目,需要進(jìn)行參數(shù)配置。步驟如下:

(1)將項(xiàng)目“活動(dòng)解決方案配置”由Debug_TS修改為Release_TS。(2)將“設(shè)置運(yùn)行庫(kù)”設(shè)為“多線程 DLL(/MD)”。(3)將“編譯”設(shè)置為“編譯為C代碼(/TC)”。(4)將“輸出文件”設(shè)置為“Release_TS/php_myFunc.dll”。(5)在“附加庫(kù)目錄”中增加“%dir% \php5.4.45\dev”。

進(jìn)行完上述配置后,執(zhí)行編譯命令,在ext\myFunc目錄下會(huì)生成php_myFunc.dll,說(shuō)明一個(gè)空白的動(dòng)態(tài)鏈接庫(kù)編譯完畢。

2.5 編寫自定義函數(shù)

上一步得到的動(dòng)態(tài)鏈接庫(kù)僅作為調(diào)試環(huán)境測(cè)試對(duì)象,并沒(méi)有包含用戶自定義函數(shù)代碼。要在其中編寫自定義函數(shù)來(lái)完成特殊操作,可以按照以下步驟進(jìn)行。

(1)用VS2008打開myFunc.h,在默認(rèn)函數(shù)PHP_FUNCTION(confirm_myFunc_compiled);下面,定義自己的函數(shù)名:PHP_FUNCTION(myfunc_test);(2)打開myFunc.c源代碼,在PHP_FE(comfirm_myFunc_compiled, NULL)下面,添加自己的函數(shù):PHP_FE(myfunc_test , MULL)(3)在myFunc.c中末尾處繼續(xù)添加

PHP_FUNCTION(myfunc_test){ //函數(shù)體 }

函數(shù)體編寫完成后,編譯生成DLL動(dòng)態(tài)鏈接庫(kù),將生成的php_myFunc.dll文件載入到PHP擴(kuò)展之中,則在PHP程序中可以直接通過(guò)以下方式調(diào)用自定義擴(kuò)展函數(shù)。

<?php echo myfunc_test(); ?>

3 結(jié)語(yǔ)

本文綜合各方面研究資料,詳細(xì)梳理了Windows平臺(tái)下搭建PHP擴(kuò)展開發(fā)環(huán)境和進(jìn)行動(dòng)態(tài)鏈接庫(kù)開發(fā)的流程和步驟,尤其對(duì)其中的關(guān)鍵環(huán)節(jié)進(jìn)行了剖析,對(duì)于PHP擴(kuò)展開發(fā)人員具有很好的參考價(jià)值。由于PHP源代碼體系十分龐大,本文并未對(duì)自定義函數(shù)的實(shí)現(xiàn)部分進(jìn)行過(guò)多分析,如要進(jìn)行復(fù)雜的擴(kuò)展開發(fā),需要對(duì)PHP內(nèi)核進(jìn)行更加深入分析和探究。

參考文獻(xiàn)

[1]Windows中搭建PHP擴(kuò)展開發(fā)環(huán)境[Z].2012-10-25.

[2]PHP擴(kuò)展開發(fā)及內(nèi)核應(yīng)用[Z].2015-10-22.

猜你喜歡
擴(kuò)展
淺談數(shù)據(jù)挖掘和自適應(yīng)算法的應(yīng)用
多維傳播語(yǔ)境下的播音主持功能與拓展研究
恒溫晶體振蕩器調(diào)頻范圍擴(kuò)展思考
財(cái)務(wù)管理內(nèi)容擴(kuò)展的路徑與方法
淺談小學(xué)英語(yǔ)教學(xué)中的情境教學(xué)法
反詰—指令言語(yǔ)行為范疇擴(kuò)展的關(guān)聯(lián)性解釋
科技視界(2015年35期)2016-01-04 10:12:30
凌云县| 永康市| 鄯善县| 呼伦贝尔市| 什邡市| 小金县| 松江区| 阜康市| 虎林市| 龙井市| 中宁县| 青浦区| 阳东县| 北辰区| 扶余县| 和林格尔县| 嵊州市| 革吉县| 镇坪县| 灯塔市| 二连浩特市| 正阳县| 兴宁市| 宁远县| 卢湾区| 五原县| 湄潭县| 井研县| 龙川县| 额济纳旗| 泸水县| 井陉县| 长葛市| 广宗县| 日照市| 嘉义县| 会昌县| 日喀则市| 大同市| 和龙市| 三明市|