IIS上結合ASP、PHP建置Web2.0資源分享系統平台

李忠憲  2009/12/23

資源網站

http://www.microsoft.com/web/Downloads/platform.aspx 微軟 Web Platform 支援網站

http://php.iis.net/ 微軟 PHP for IIS 支援網站

http://windows.php.net/  PHP官方網站 Windows 支援網頁

http://downloads.php.net/pierre/ 可支援 Windows 之 PECL 套件表列

http://www.zend.com/en/downloads/ Zend 提供的PHP效能增強套件

http://dev.mysql.com/downloads/ MySQL官方網站下載頁面

PHP 在 Linux 平台執行比在 Windows 上執行好嗎?

到目前為止 PHP 上大多數的開發者仍然在 Linux 進行開發,也因此在 Linux 上執行 PHP 能夠獲得較多的系統支援,也有比較多的套件可供免費取得,在 Windows 平台上執行 PHP 仍然有許多限制,例如:在 Windows 上要使用 PHP 來管理郵件,仍然是一件艱難的任務,因為在 Windows 平台上要取得一套免費又提供 PHP 函式庫支援的郵件伺服器太困難了。

此外 PHP 在 Windows 上的執行效能也比較差,特別是透過 IIS 來執行 PHP 網頁時更是如此,雖然這個問題可以透過安裝 Zend-Optimizer 來加以改善,但整體表現仍然不如在 Linux 上執行理想。

之所以要在 Windows 平台上使用 PHP,純粹是因為 Windows 提供了圖形化管理介面,對於初學者來說門檻較低。

使用 Apache 還是 IIS?

在 Windows 平台上運行網頁服務,除了微軟提供的 IIS外,也可以使用 Linux 上最為風行的 Apache。兩者在效能表現上,IIS 略勝一籌,IIS 的管理介面也設計的比較完整和便利。此外 Apache 在 Windows 上的系統支援仍然有限,使得部分功能並無法在 Windows 平台運作得很好。

假如 Windows 上已經有 IIS 在運作,在安裝 Apache 後將發生埠號衝突,而導致 Apache 無法啟動。遇到這樣的問題一般會在伺服器上多安裝一個 IP 來解決,很不幸的是 Apache 和 IIS 的虛擬站台機制並不相容,所以這樣做並沒有用,改用 named-base 虛擬站台一樣沒用。唯一的方法就是改埠號。

綜合以上的討論,如果想要使用 PHP 來架設功能強大的 Web 2.0 網站,最好的選擇是:Linux + Apache,其次是 Windows + IIS,過去經常使用的 Appserv 則不推薦使用。

安裝 IIS 伺服器

雖然 IIS 也可以安裝在 XP 上,但由於 Windows XP 本身的重重限制,這樣做並不好,即使是使用修補工具將 XP 的十人連線限制移除,但 XP 仍然有最多五十人連線的限制,當然我們辛苦架設一個網站絕對不是只要服務五十個人,因此正確的做法仍然應該把 IIS 建置在 Windows server 2003(或以上的版本)上。

為了提供在電腦教室可以實機操作的實作環境,本文的範例會將 IIS 建置在 XP 上。目前已知在 XP 上安裝 IIS 經常會發生 ASP 無法執行的問題,解決方法如下:

1. 重建 Distributed Transaction Coordinator (DTC) 服務的日誌記錄檔。

從開始工作列執行 msdtc -resetlog

2. 啟動 DTC 服務

我的電腦按右鍵 / 管理 / 服務及應用程式 / 服務 / Distributed Transaction Coordinator
將此服務啟動,並將啟動類型設為自動

3. 註冊 ASP 函式庫

進入命令列模式後,執行cd\windows\system32\inetsrv
rundll32 wamreg.dll, CreateIISPackage
regsvr32 asptxn.dll

4. 解除 TCPIP 連線 10 人限制

下載 XP10Patch.zip
解壓縮後,執行 EvID4226Patch.exe
重開機

 

透過 WPI 安裝 PHP

1. 下載 wpilauncher.exe 並執行

2. 勾選 Windows Cache Extension 1.0 for PHP 5.2 和  PHP 5.2.9-2 兩個套件。

3.從安裝清單中,可以看到將自動安裝 FastCGI for IIS 套件。在 IIS 上執行 PHP 有兩種方式,過去是透過 ISAPI 介面來執行,每次執行都會啟用獨立的記憶體區塊來處理系統環境與 URI 參數,執行效能較差;新的方法是透過 FastCGI 來執行,系統環境與 PHP 程式會被自動快取,僅花時間在處理 URI 參數所以速度相對提升很多。如果您是自行安裝 PHP,將會使用前者來執行,必須自行安裝 FastCGI 套件並設置必要的 IIS 參數。

4.安裝完成!

 

測試 PHP 程式

1. 打開記事本輸入以下程式碼

<?php
phpinfo();
?>

2. 將檔案儲存於 c:\inetpub\wwwroot\test.php

3. 打開瀏覽器,網址列輸入 http://localhost/test.php

4. 可依個人需要另外安裝額外 PECL 套件。

 

使用 IIS 運作 PHP 的優缺點

優點:

1. 可以讓 ASP 程式與 PHP 程式同時並存於同一個網站,使用相同 domain 網址連線。不必架設額外伺服器,不用配置額外IP或連接埠,不用修改防火牆規則。

2. 透過表單傳值或 RIA、AJAX,可以將 PHP 與 ASP 程式功能結合於單一網頁中,可使用 PHP 的免費資源彌補 ASP 程式的不足,不必額外購買 ASP 元件。(例如:在 ASP 網頁中使用swfupload多檔上傳套件將檔案傳給 PHP 程式處理,並將處理結果以AJAX即時顯示於 ASP 網頁)

3. ASP 和 PHP 程式可以共用 cookie。

缺點:

1. 無法在同一支程式裡混用 ASP 和 PHP 程式碼。

2. 由於 session 運作方式尚未統整,因此無法共用 session 變數。

3. 需額外安裝 Zend Core ISAPI module,才能享受 Zend  Engine 的高速快取功能或將 PHP 程式碼加密。(安裝方式可參考 http://www.zend.com/support/knowledgebase.php?kbid=249&view_only=1

 

安裝 Zend-Optimizer 來增強 PHP 效能

由於 Zend-Optimizer 和 Windows Cache Extension for PHP 功能重疊,你只能選擇其中一項運行。也就是說安裝 Zend-Optiomizer 之後 Windows Cache Extension for PHP 就不會再起作用,如果你認為提升效能是一件很重要的事,建議你還是要安裝 Zend-Optimizer。步驟如下:

1. 至 http://www.zend.com/en/downloads/ 網站下載套件(或從這裡下載),並執行安裝程式。

2. 選擇安裝目錄。

3. 選擇網頁平台的類型,系統自動偵測到 IIS。

4. 選擇 PHP 所在目錄,透過 WPI 安裝將會擺放在 C:\Program Files\PHP。

5. 選擇預設的網站根目錄。

6. 開始進行安裝。

 

設置 PHP 組態

下載中文版組態檔

如果你同時安裝 Zend-Optimizer 和 Windows Cache Extension for PHP,你可以從 php.ini 直接修改組態,來切換這兩種快取引擎,設定使用 Zend-Optimizer 請加入下面的組態﹝請先搜尋組態檔確定下面組態並不存在﹞:

[Zend]
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.2.6\lib\Optimizer-3.2.6"
zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.2.6\lib\ZendExtensionManager.dll

如果要改用 Windows Cache Extension for PHP 你必須將上述組態刪除改為:

[PHP_WINCACHE]
extension=php_wincache.dll

為提供大檔上傳,例如最大可以傳 10MB 大小的檔案。你需要修改以下組態:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;

max_execution_time =300
max_input_time = 60
;max_input_nesting_level = 64
memory_limit = 128M

post_max_size = 16M
upload_max_filesize = 10M

 

安裝資料庫

MySQL

由於目前使用 PHP 開發的網頁應用程式,大多使用 MySQL 資料庫管理系統,為了讓這些應用程式能正常在 IIS 上運作,您需要自行安裝 MySQL 5.0 for Windows,為了促進相容請不要安裝最新版本!因為 MySQL for Windows 的安裝程序較為簡單,不在這裡介紹,當 MySQL 資料庫系統裝好後你還需要進行相關設定,才能讓後續的安裝程序自動連線到 MySQL 為您建立必要的資料表。

第一次使用 MySQL 首先你必須確定 MySQL 會隨著電腦開機自動啟動,請在「我的電腦」上按右鍵選「管理」,點選「服務及應用程式」中的「服務」,在 mysql 服務上點兩下。

將啟動類型修改為「自動」。

修改 MySQL 管理密碼的方式:

1. 按「開始」->「執行」輸入指令「cmd」開啟命令列模式。

2. 切換到 mysql 所在目錄的 bin 資料夾,輸入指令「mysql -u root -p」進入 MySQL 管理主控台。預設密碼為空字串。

3. 登入完成後在 mysql> 提示號後面輸入 SQL 指令「use mysql;」,開啟系統資料庫。

4. 輸入 SQL 指令「update user set password=md5('你想使用的密碼') where user='root';」

修改字元集的方式:

1. 使用記事本打開 C:\WINDOWS\my.ini

2. 在 [client] 和 [mysqld] 兩個節區,各輸入「default-character-set=utf8」組態。

如果想要讓 PHP 以外的程式也能讀寫 MySQL 中的資料紀錄,您還必須安裝 MySQL Connectors,官方網站共提供支援 JDBC、ODBC 和 .NET 等三種驅動程式。請自行選擇需要的驅動程式進行安裝。

為了在程式開發階段能夠檢視和修改資料庫內容,您需要安裝 phpMyadmin 應用程式,這支程式的安裝手冊網路上非常多極容易取得,請自行下載安裝。

 

MSSQL

透過 WPI 安裝 MSSQL 比較簡單,所安裝的版本是 express 版也就是過去的 desktop 版,這個版本雖然是免費的,但功能強大一點也不輸給正式版資料庫,但是它缺乏圖形化管理介面,還好 Visual Studio 2008 套件本身有提供 SQL Server 圖形化管理介面,是給程式開發者使用的。使用 WPI 安裝時,只要有勾選這個套件,一樣會自動幫您安裝,但是您必須先確定電腦已經安裝 Visual Studio 2008 和 SP1。

1. 執行 wpilauncher.exe

2. 點選「Web Platform」找到「資料庫」項目,點選「自訂」連結。

3. 將下列三個套件全選安裝,注意: SQL Server 2008 Management Studio Express 必須在已安裝 Visual Studio 2008 + SP1 的環境才能安裝。

4. 表列為將會安裝的所有套件(包含相依套件)。

5. 資料庫驗證模式請選擇「混合模式驗證」,這個模式對於開發網頁應用程式較為便利。

6. 進行安裝程序中。

7. MS SQL 伺服器安裝完成。

 

安裝 Web 2.0 應用服務

有了資料庫以後,就可以開始來安裝各種 Web 2.0 應用服務,本文將介紹一個使用 ASP .NET 程式語言的 CMS 架站軟體和一個使用 PHP 語言的公用網路相簿系統,最後嘗試將兩個系統結合在一起運作。

安裝使用 ASP .NET 之 CMS

1. 執行 wpilauncher.exe

2. 點選「Web應用程式」挑選感興趣的 CMS 服務。底下以「mojoProtal」為例。

3. mojoPortal 預設會一併安裝藝廊,為了避免安裝程序過於複雜,造成安裝失敗的機會增加,請先將藝廊移除暫時不安裝。

4. 請將 mojoPortal 應用程式名稱清空,這樣做可以將 CMS 安裝於網站根目錄。

5. 選擇資料庫來源以及設定新建資料庫的管理帳號。

6. 完成第一階段的安裝。 

7. 打開瀏覽器連到 localhost 上,將會自動進行第二階段的安裝。

8. 從網頁的上方連結點選「登錄」。

9. 預設的管理帳號為 admin@admin.com,密碼為 admin。

10. 點選右上方的「administration」連結,進入管理介面進行「站點設置」。

11. 從「內容管理」可以建立部落格空間、論壇、行事曆、地圖、網頁即時通、投票、問卷調查、圖庫、共享文件......等網頁應用程式,並可以使用內嵌框架或 片斷 HTML 嵌入各種 web widget、flash動畫、youtube影片.......等互動內容。

 

安裝使用 PHP 之網路應用程式

1. 執行 wpilauncher.exe

2. 點選「Web應用程式」挑選感興趣的服務。底下以「藝廊」(就是 PHP 上最有名的 Gallery)為例。

3. Gallery 程式需要用到 MySQL 資料庫來存放照片的簡介資訊,在 IIS 上執行時將用 SQL Server 2008 來取代 MySQL,使用 MySQL Connector 將 MySQL 指令轉向給 MS SQL。

4. 當然你也可以自行將 MySQL 伺服器事先安裝在 XP 上,然後將 MySQL Connector 和 SQL Server 相關套件移除不安裝。(點按套件名稱前面的叉號)

5. 選擇資料庫來源以及設定新建資料庫的管理帳號。

6. 安裝完成。

7. 啟動藝廊後,從網頁直接進行第二階段的設定。

8. 首先在 C:\Inetpub\gallery 目錄中新增一個純文字檔,檔名為 login.txt,將網頁上的字串貼入到檔案中。


9. 系統檢查,如果有警告項目必需依照說明修改 pjhp.ini 設定檔。

10. 安裝類型,在這個範例中將使用標準安裝。如果選取多站台安裝,則必須設定 Named Base 虛擬站台。

11. 儲存目錄預設放在 gallery/g2data 目錄中,安全性較低(任何人都可以上傳檔案到該資料夾),如果要對外公開服務,建議將該資料夾搬移到 C:\Inetpub\wwwroot 以外的其它地方,以杜絕來自 HTTP(包含 WebDAV)的遠距存取。

12. 資料庫設定,這個步驟將建立資料庫連結字串,並使用該連結字串新增 gallery 套件所需的所有資料表。

開啟 SQL Server Management Studio 就可以瀏覽 gallery 資料庫中剛剛建立完成的資料表,下圖為 g2_user 資料表的內容。

13. 設定預設管理員(admin)的密碼及郵件信箱。

14. 相關設定值已經儲存於 config.php 中,將來若需變更設定可以直接修改該檔案!

15. 安裝核心模組。

16. 安裝外掛模組,本範例為全選安裝。

17. 這個步驟將會檢查 gallery 目錄及檔案權限,如果權限過於寬鬆,將會提示適當的權限指令(Linux)

18. 安裝至此全部完成,請手動將 C:\Inetpub\wwwroot\gallery\install 目錄刪除!

19. 重新連線到 gallery 後,將進入系統預設畫面,可以從左上角登入連結,輸入管理員帳號密碼進行外掛模組設定與啟用。

20. 以管理員身分登入後,點選上方的連結「網站管理」。

21. 從左側選單點選「外掛組件」,檢查尚未啟動之組件並進行組態設定。

 

整合 ASP .NET 與 PHP 應用程式

在安裝完 mojoPortal 和 gallery 後,接下來便是要將兩個應用程式結合在一起,我們採用的方式是在 mojoPortal 網站上建立一個 gallery 連結。

1. 打開瀏覽器連到 localhost,並使用管理員帳號登入。然後在首頁右上方的「New Page」連結點一下,出現「添加/編輯頁面」的畫面後,輸入頁面名稱及網址,如下圖。

2. 儲存完成後,首頁將會自動出現剛才建立的連結,請點一下連結確定它是有效的。