1. 程式人生 > >在vs2008開發PHP擴充套件之一--基礎環境搭建

在vs2008開發PHP擴充套件之一--基礎環境搭建

     在linux開發PHP擴充套件相對windows配置容易的的多,但是有時候我們是用windows來做伺服器的,就不得不編譯用於windows版本的dll擴充套件。這裡講一下在vs2008下開發PHP擴充套件的環境搭建。大體思路如下(有的配置需要根據你的情況而定,所以下面的的步驟並不一定在你的PC上可以搭建成功。但是大體步驟是這樣,這裡只是拋磚引玉):

第一:準備工具

1.vs2008

2.php

php-5.3.8-src

http://windows.php.net/downloads/releases/php-5.3.8-src.zip

VC9 x86 Non Thread Safe

http://windows.php.net/downloads/releases/php-5.3.8-nts-Win32-VC9-x86.zip

VC9 x86 Thread Safe 

http://windows.php.net/downloads/releases/php-5.3.8-Win32-VC9-x86.zip

使用ISAPI的方式來執行PHP就用Thread Safe(執行緒安全)的版本

使用FastCGI模式執行PHP的話就沒有必要用執行緒安全檢查了,用None Thread Safe(NTS,非執行緒安全)的版本能夠更好的提高效率。

3.必要庫

http://www.php.net/extra/bindlib_w32.zip
http://www.php.net/extra/win32build.zip

第二:步步為營搭建開發環境

我這裡沒有用到cygwin,因為我的開發只是一個很簡單的demo,沒有使用第三方了類庫。如果是把linux下拿過來的擴充套件專案,可能用到一些庫。可能用cygwin會比較好。但是沒有cygwin完全可以在window下開發。具體如下:

1.目錄結構:

F:\php_win

F:\php_win>dir

F:\php_win 的目錄

2011-11-23  21:56    <DIR>          php-5.3.8
2011-11-23  20:43    <DIR>          php-5.3.8-nts-Win32-VC9-x86
2011-11-18  14:19        15,659,969 php-5.3.8-nts-Win32-VC9-x86.zip
2011-11-23  15:07        20,745,577 php-5.3.8-src.zip
2011-11-23  21:51    <DIR>          win32build

我把第三方包都放到合併到一起放在win32build目錄下。你可以根據情況而定

2.安裝vs2008這裡就不多說了

我的安裝在C:\vc資料夾下面。

3.配置PATH

安裝完成vs2008,有的編譯命令可能不能直接執行。加入PATH,可以避免這個問題。

這裡有兩個目錄要注意

一個是C:\vc\vc2008compiler\bin

下面有cl.exe\link.exe等等

第二個是C:\vc\Microsoft Visual\VC2008 Professional Edition\SDK\V6.0A\bin

把他們加入到PATH環境變數中。

4.建立配置PHP開發環境。

(1)。lamp開發環境,因為我們可能會用到php.exe來執行一些指令碼。

(2)。PHP二次開發環境。PHP開發環境的配置很繁瑣,但是官方提供了shell指令碼,讓我們可以來快速的構建一個可以用的PHP二次開發環境。

進入F:\php_win\php-5.3.8>。執行cl,確保能夠執行。具體如下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>cl
用於 80x86 的 Microsoft (R) 32 位 C/C++ 優化編譯器 15.00.21022.08 版
版權所有(C) Microsoft Corporation。保留所有權利。

用法: cl [ 選項... ] 檔名... [ /link 連結選項... ]

C:\Documents and Settings\Administrator>f:

F:\>cd php_win

F:\php_win>cd php-5.3.8

F:\php_win\php-5.3.8>buildconf
Rebuilding configure.js
Now run 'configure --help'

F:\php_win\php-5.3.8>cscript /nologo configure.js --with-php-build="F:\php_win\win32build" --without-libxml  --disable-o
dbc
Saving configure options to config.nice.bat
Checking for cl.exe ...  <in default path>
  Detected compiler MSVC9 (Visual C++ 2008)
  Detected 32-bit compiler
Checking for link.exe ...  D:\cygwin\bin
Checking for nmake.exe ...  <in default path>
Checking for lib.exe ...  <in default path>
Checking for bison.exe ...  F:\php_win\win32build\bin
Checking for re2c.exe ...  <not found>
Parsers will not be regenerated
Checking for zip.exe ...  <not found>
Checking for lemon.exe ...  <not found>
Checking for mc.exe ...  C:\vc\Microsoft Visual\VC2008 Professional Edition\SDK\V6.0A\bin
Checking for mt.exe ...  C:\vc\vc2008compiler\bin

Build dir: Release_TS
PHP Core:  php5ts.dll and php5ts.lib

Checking for wspiapi.h ...  <not found>
Checking for wspiapi.h ...  <not found>
Enabling SAPI sapi\cgi
Enabling SAPI sapi\cli
Enabling extension ext\bcmath
Enabling extension ext\calendar
Checking for library oleaut32.lib ... <not found>
Enabling extension ext\com_dotnet
Checking for mscoree.h ...  <not found>
Checking for mscoree.h ...  <not found>
Enabling extension ext\ctype
Enabling extension ext\date
Enabling extension ext\ereg
Enabling extension ext\filter
Enabling extension ext\ftp
Checking for library libjpeg_a.lib;libjpeg.lib ... <not found>
WARNING: gd not enabled; libraries and headers not found

Enabling extension ext\hash
Checking for library libiconv_a.lib ... <not found>
Checking for library libiconv.lib ... <not found>
Checking for library iconv_a.lib ... <not found>
Checking for library iconv.lib ... <not found>
WARNING: iconv support can't be enabled, libraries or headers are missing

Enabling extension ext\json
Checking for library ws2_32.lib ... <not found>
Enabling extension ext\pcre
Enabling extension ext\reflection
Enabling extension ext\session
Enabling extension ext\spl
Checking for timelib_config.h ...  ext/date/lib
Enabling extension ext\standard
Enabling extension ext\tokenizer
Checking for zlib.h ...  F:\php_win\win32build\include
Enabling extension ext\zip
Checking for library zlib_a.lib;zlib.lib ... ..\win32build\lib\zlib.lib
Checking for zlib.h ...  F:\php_win\win32build\include
Enabling extension ext\zlib
WARNING: dom support can't be enabled, libxml is not enabled

Enabling extension ext\phar
        Native OpenSSL support in Phar disabled
WARNING: simplexml not enabled; libraries and headers not found

WARNING: xml support can't be enabled, libraries or headers are missing


Creating build dirs...
Generating files...
Generating Makefile
Generating main/internal_functions.c
Generating main/config.w32.h
Generating phpize
Done.



Enabled extensions:
-----------------------
| Extension  | Mode   |
-----------------------
| bcmath     | static |
| calendar   | static |
| com_dotnet | static |
| ctype      | static |
| date       | static |
| ereg       | static |
| filter     | static |
| ftp        | static |
| hash       | static |
| json       | static |
| pcre       | static |
| phar       | static |
| reflection | static |
| session    | static |
| spl        | static |
| standard   | static |
| tokenizer  | static |
| zip        | static |
| zlib       | static |
-----------------------


Enabled SAPI:
-------------
| Sapi Name |
-------------
| cgi       |
| cli       |
-------------


-------------------------------------------
|               |                         |
-------------------------------------------
| Build type    | Release                 |
| Thread Safety | Yes                     |
| Compiler      | MSVC9 (Visual C++ 2008) |
| Architecture  | x86                     |
-------------------------------------------


Type 'nmake' to build PHP

F:\php_win\php-5.3.8>

如果出現上類似的提示, 說明你的PHP開發環境已經搭建成功。如果執行腳步提示錯誤,你可以搜尋錯誤訊息,具體解決。從上面的不難看出一些很重要的資訊。

其實最主要的就是生成config.w32.h。即PHP開發環境的配置檔案。如果沒有這個指令碼,windows下開發php,簡直太悲慘了。

5.開發PHP擴充套件的方法。

到這裡我們就可以建立開發PHP擴充套件了,但是無從下手,我們該怎麼辦,其實PHP也給我們提供了很好用的工具來建立一個PHP擴充套件的骨架。就是用F:\php_win\php-5.3.8\ext下的ext_skel_win32.php

如何執行,以php結尾,說明依賴php。下面看具體方法,我建立一個名為’test‘的擴充套件。

這裡要確保你的php.exe可以直接在cmd下使用,具體還是加入Path路徑。

雖然有ext_skel_win32.php,用php執行,但是我們不知道具體的內容。

其實執行如下命令:

F:\php_win\php-5.3.8\ext>php ext_skel_win32.php
ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]
           [--skel=dir] [--full-xml] [--no-help]

  --extname=module   module is the name of your extension
  --proto=file       file contains prototypes of functions to create
  --stubs=file       generate only function stubs in file
  --xml              generate xml documentation to be added to phpdoc-cvs
  --skel=dir         path to the skeleton directory
  --full-xml         generate xml documentation for a self-contained extension
                     (not yet implemented)
  --no-help          don't try to be nice and create comments in the code
                     and helper functions to test if the module compiled

Warning: fopen(/.php): failed to open stream: No such file or directory in F:\php_win\php-5.3.8\ext\ext_skel_win32.php o
n line 52

F:\php_win\php-5.3.8\ext>

可以看到如何使用這php指令碼。大體命令如下
F:\php_win\php-5.3.8\ext>php ext_skel_win32.php  --extname=test
Creating directory test
Creating basic files: config.m4 config.w32 .svnignore test.c php_test.h CREDITS EXPERIMENTAL tests/001.phpt test.php [do
ne].

To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/test/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-test
5.  $ make
6.  $ ./php -f ext/test/test.php
7.  $ vi ext/test/test.c
8.  $ make

Repeat steps 3-6 until you are satisfied with ext/test/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.


F:\php_win\php-5.3.8\ext>

這樣就成功建立了一個php擴充套件骨架,你可以在裡面修改。具體的還要好好研究PHP API。具體擴充套件的位置就在ext目錄下,開啟可以看到test資料夾,這就是剛才命令建立的。
 F:\php_win\php-5.3.8\ext\test 的目錄

2011-11-29  16:57    <DIR>          .
2011-11-29  16:57    <DIR>          ..
2011-11-29  16:57                16 .svnignore
2011-11-29  16:57             1,970 config.m4
2011-11-29  16:57               282 config.w32
2011-11-29  16:57                 4 CREDITS
2011-11-29  16:57                 0 EXPERIMENTAL
2011-11-29  16:57             2,768 php_test.h
2011-11-29  16:57             5,128 test.c
2011-11-29  16:57             4,954 test.dsp
2011-11-29  16:57               500 test.php
2011-11-29  16:57    <DIR>          tests
               9 個檔案         15,622 位元組
               3 個目錄  7,441,883,136 可用位元組

F:\php_win\php-5.3.8\ext\test>


這樣一個php擴充套件的框架已經建立完成了。下面就是配置使用vs2008開發這個擴充套件。後續文章講解。