[公告] 痞客邦新服務上線 每日星座運勢測算[公告] 痞客邦應用市集全新改版![公告] 痞客邦「應用市集」新 App 上架-iFontCloud Professional[公告] 痞客邦後台發表文章提供插入多張圖片新功能[公告]痞客邦新服務上線 部落客商店聚集就在《痞市集》

先說明我不是使用php中的COM方式先註冊再使用的喔!

因為研究了一天可是卻一直跑出 "失敗,找不到指定的模組" 等等的字樣......

實在是太讓人大受打擊了

後來同事告訴我還有別的方式可以在php中把DLL載入,

用COM的方式太複雜了~~

所以應該不是只有我ㄧ個人覺得很難嘛!

 

不過下列的方法我也是自己試了好久才試出來的!!

資料也都是從好朋友google搜尋到的,

這次找到的資料幾乎都是大陸簡體字,

雖然是看的懂,

可是因為很多步驟都要一步一步照著做

看了一整天的結果是眼花撩亂阿

而且都沒有圖文對照,

是我要求太多嗎??

可是之前找台灣寫的網誌都圖文並茂很美很清楚呢!

所以!!! 這個重責大任就交給我了~~~哈哈哈 (不知道到底是哪來的自信)

 

 

以下進入主題囉-------------------------------------------------------------------

首先我上網找到php要使用DLL的方式有兩種: 

1. COM, 要先註冊的方式(Regsvr32)

2. 修改php.ini, 新增一個extension=xxx.dll

 

因為第一種方式我試不出來 (跑出 "......失敗,找不到指定的模組")   [麻煩有試出來的朋友告訴我阿!!]

所以我就改用了第二種方法~~ 事實上是兩種都可以的喔!

 

首先一開始讓我很困惑的事情是:

用vs2008寫出的DLL就可以直接讓php使用嗎? 還是有一定的格式呢??

 

所以我就自己先用vs2008寫了一個DLL (php_dlltest.dll)

我將自己寫好的DLL放入 \php\ext\ 目錄下,

然後修改 \php\php.ini 檔案, 新增一行 : extension=php_dlltest.dll

接下來重新啟動Apache看設定是否生效,

結果完全無法重新啟動......

證明了DLL應該是有一定的格式才能讓php使用的

 

 

Download (下面列出了建置DLL環境需要使用到的軟體檔案):

1. php源代碼

2. php在Windows下的二進制代碼包   (需要用到二進制代碼包裡的 /dev/php5ts.lib )

*****注意: 1,2要同版本的php*****

 

3. php win32 build extras

4. EditPlus

    順便附上從網路上找到提供給個人免費使用的key囉~~增加大家的方便

    註冊名稱:Free User
    註冊碼   :6AC8D-784D8-DDZ95-B8W3A-45TFA

 

編譯php擴展的環境:

1. 建立一個新的資料夾 c:\buildphp

 

2. 將下載下來的php源代碼和php win32 build extras解壓縮, 一起放在c:\buildphp

 

3. 開始-Microsoft Visual Studio 2008-Visual Studio Tools-Visual Studio 2008 命令提示字元

 8

 

4. 輸入指令, 切換到c:\buildphp php源代碼的目錄下

 

5. 輸入: buildconf.bat (產生buildconf.js)

 

6. 輸入:
cscript /nologo configure.js --without-xml --without-wddx --without-simplexml --without-dom --without-libxml --disable-zlib --without-sqlite --disable-odbc --disable-cgi --enable-cli --enable-debug --without-iconv --disable-ipv6

*****這裡要特別注意是兩個--喔! 之前因為打成一個-,導致都編譯錯誤*****

 

7. 輸入: nmake

 

8. 輸入nmake後可能會出現編碼錯誤,

    找到出現錯誤的檔案後,

    用EditPlus選擇Western European (Windows)編碼打開

1

 

再另存為utf-8編碼, 然後重新輸入nmake 

2

 

這裡我有用Notepad++存成utf-8,

但是編譯不成功

所以還是乖乖下載EditPlus進行轉碼的動作吧

 

9. 完成: php源代碼/main/目錄下, 產生了一個config.w32.h

 

 

使用php源代碼下的 /ext/ext_skel_win32.php 生成擴展的骨架類:

1. 安裝CygWin或者也可以安裝MSYS (因為用到的是sh.exe檔案), 修改$cygwin_path路徑 (sh.exe的存放路徑)

 

2. 設置環境變量: 將解壓縮的php在Windows下的二進制代碼包目錄和$cygwin_path路徑加入到PATH環境變量中

9  

10  

 

將路徑用標點符號;分開

在變數值最後面再加上去

11  

 

3. 開始-執行-cmd: 切換到php源代碼ext目錄下, 執行 php ext_skel_win32.php --extname=mytest

 

4. 這樣就會在php源代碼ext目錄下生成一個mytest的目錄 (裡面包含了php_mytest.h, mytest.cmytest.dsp)

 

 

vs2008的設定:

1. 用vs2008打開mytest.dsp

 

2. 專案-mytest屬性-組態屬性-C/C++-程式碼產生-執行階段程式庫-多執行緒DLL(/MD)

3

 

 

4  

 

3. 專案-mytest屬性-組態屬性-C/C++-進階-編譯為-編譯成C程式碼(/TC)

5  

 

4. 專案-mytest屬性-組態屬性-連結器-一般-其他程式庫目錄-加入php在Windows下的二進制代碼包的dev目錄

6  

 

5. 選擇方案組態-Release_TS, 方案平台-Win32

7  

 

6. 修改php源代碼中的/Zend/Zend.h

˙  先找到#include <stdio.h>

    然後移動到

      #ifdef ZEND_WIN32

  # include "zend_config.w32.h"

  # define ZEND_PATHS_SEPARATOR ';'

  #elif defined(NETWARE)

  # include <zend_config.h>

  # define ZEND_PATHS_SEPARATOR ';'

  #elif defined(__riscos__)

  # include <zend_config.h>

  # define ZEND_PATHS_SEPARATOR ';'

  #else

  # include <zend_config.h>

  # define ZEND_PATHS_SEPARATOR ':'

  #endif

    後面去

 

7. 修改php源代碼中的/Zend/zend_config.w32.h

˙  將#define vsnprintf _vsnprintf 這行注釋掉

 

8. 將php在Windows下的二進制代碼包壓縮檔中的/dev/php5ts.lib複製到php源代碼/ext/mytest底下

 

9. 在vs2008上按下編譯, 完成後就可以在php源代碼目錄下的Release_TS目錄下生成php_mytest.dll了~

 

 

修改php.ini檔案:

1. 將php_mytest.dll複製到 /php/ext/底下

 

2. 修改php.ini, 加上extension=php_mytest.dll

 

3. 重新啟動Apache

 

4. 查看phpinfo()裡面有沒有新增了mytest的library

 

 

 將將將~~~終於完成囉~~~

, , ,

Posted by peipei at 痞客邦 PIXNET 留言(1) 引用(0) 人氣()


open trackbacks list Trackbacks (0)

留言列表 (1)

Post Comment
  • Vic
  • 作者您好!
    請問這個方式產生的dll是一定是屬於VC9?
    還是說VC6 OR VC9是決定於我下的PHP源代碼跟二進制代碼包嗎?
    最後謝謝你的文件,對我幫助很大,謝謝!
  • 上網查了一下:

    PHP For Windows的版本有分成VC6和VC9,
    VC6是使用legacy Visual Studio 6 compiler 這個編譯器編譯的,
    VC9是使用the Visual Studio 2008 compiler 微軟的VS編輯器編譯的

    如果是在windows下使用Apache+PHP的,請選擇VC6版本,
    如果是在windows下使用IIS+PHP的,請選擇VC9版本

    所以我想應該就是看你的安裝環境是什麼來決定你要下載什麼版本的PHP,
    然後再來產生需要的dll


    希望這樣有回答到你的問題^^

    很多東西都是自己上網查到然後再試出來的
    如果有什麼不對的地方歡迎提出來討論:)

    peipei replied in 2013/09/27 10:23

You haven’t logged in yet, please use guest status to leave message. You can also log in with above service account and leave message

other options