還記得之前寫如何在Server 2008的IIS7安裝PHP是 2008 年底的事情,轉眼間已經來到 2011 年的年中,當時寫的東西其實已經不太適用現在的環境,所以這次直接用主流的 Windows Server 2008 R2 來個安裝心得分享。
1). 同樣到 PHP 官網下載適用於 Windows 的 PHP 軟體。
撰寫本文時的 PHPH 版本是 5.3.6,且選擇 VC9 x86 Thread Safe 的 Zip 版本。會選擇 Zip 版本的原因純粹是小弟自使用 PHP 以來,一直都是習慣手動設定,也沒玩過 Installer 版本。至於跟 Non Thread Safe 版本差在哪裡,有興趣的人可以上網搜尋一下,因為懶所以就不在這裡說明了。另外,也不用特別找出 x64 版本來跑(我已經幹過這蠢事了),因為 x86 版本就可以正常使用啦。
2). 將下載的檔案解壓縮到自訂目錄。
範例是放在「C:\php」。依照過去習慣,本來會先設定php.ini,但在這先不做處理,因為有些狀況會在文後說明。
3) 請務必到微軟網站下載及安裝 Microsoft Visual C++ 2008 SP1 可轉散發套件 x86 版。
不信邪的可以只安裝 x64 版或者 Visual C++ 2010,保證只會吐文後的錯誤訊息。
4) 新增 IIS 角色。
功能服務除預設外,請再勾選「CGI」。不需選擇 ISAPI 的主要原因,在於 PHP 官方從 5.3 之後放棄了 ISAPI ,而且微軟官方也是採 FastCGI 模式執行 PHP。
5) 新增設定 IIS 上的 PHP 功能。
這部份可以選擇從伺服器端或站台端做設定,從伺服器端好處是之後所建的每個站台都自動套用了 PHP 設定。本範例是以站台為主,純粹有關小弟的龜毛偏好問題,不喜歡所有站台套通用設定。請從伺服器管理工具找到 IIS 管理員,選擇欲設定的站台點擊「處理常式對應」,在處理常式對應的頁面,用滑鼠右鍵或頁面右邊的動作窗格選擇「新增模組對應」。
6) 設定 PHP 的模組對應。
請參考下圖做設定:
a. 要求路徑必為「*.php」
b. 模組請務必選擇「FastCgiModule」
c. 執行檔請選擇 php 目錄中的「php-cgi.exe」
d. 名稱看你開心怎麼建都可以
設定完按確定後,會出現下面視窗,按「是」就對了。
檢查是否已啟用 PHP。
7) 設定起始預設文件。(選用步驟!?)
正常來說,如果會使用 PHP 的網站,大多會有預設 index.php 文件做起始,請參考下面截圖設定。另外,預設文件的先後順序也請依需求做調整。
測試 PHP 是否可用。
用檔案總管到 IIS 站台存放檔案的目錄,新增一個「index.php」或「phpinfo.php」,再打開筆記本編輯該檔案,填入「<?php phpInfo(); ?>」並存檔。
接著按下圖步驟,開啟該網頁看有無顯示如最上圖的資訊畫面。
最後,來看一些可能會遇到的狀況。(這才是 IT 人的血淚,因為魔鬼都藏在這裡)
如果打開 php 網頁卻吐出 HTTP 500,錯誤碼為「0x800736b1」,請檢查是否確實安裝了 Microsoft Visual C++ 2008 SP1 可轉散發套件,而且是 x86 版。
雖然在沒有建立 php.ini 的情況下,已經可以讓 IIS 顯示 PHP 資訊頁面,但是正常來說,一定都會自行建立及編輯 php.ini 的內容,以符合實際需求。
但是建立了 php.ini 設定檔,卻沒有指定「date.timezone」的值,就會在瀏覽 php 頁面時,不管怎樣都只會吐「HTTP 500 內部伺服器發生錯誤」的訊息。
這個狀況其實在執行 phpinfo 時,就已經明確說明在該頁面裡。
解決方法很簡單,只要到 php.ini 裡將
;date.timezone=
去掉「;」符號以啟用該參數,並改成你所在的時區即可
date.timezone= "Asia/Taipei"
最後,請依照微軟官方文件修改 php.ini:
a. 去掉「;」符號啟用及編輯下列參數
fastcgi.impersonate = 1
cgi.fix_pathinfo= 1
cgi.force_redirect = 0
b. 指定 open_basedir 的位置。(官方文件指的是網頁目錄的所在位置,實際作用不清楚,因為我沒設定)
c. 指定 extension_dir 的位置,也就是你的延伸模組位置,一般都會是
extension_dir = "./ext"
d. 啟用需要的延伸模組
以上,打完收工。再看了看自己的文章,似乎設定起來也不是這麼快速,但小弟真的覺得比之前的版本簡單許多了。
推薦延伸閱讀:
IIS Team - Using FastCGI to Host PHP Applications on IIS 7
IIS Team - PHP on IIS7
很讚的分享!
感謝
感謝 前輩指點 , 不須多走冤枉路 !
Geena
我的是英文版,不知道什麼是 "處理常式對應"
"處理常式對應"="Handler Mappings"
很好很實用,但我安裝完後發現在 PHP 的html FORM 內不可以用 POST,請問怎樣解決?
原來是可以用 html FORM 的 POST, 是因為 web.config 先前設定的問題,請不用理會我先前的問題
站長您好,我的環境是WIN7(WindowsUpdate全裝)+IIS7.5+PHP5.5.6,跟隨您的教學文章,但沒有安裝另外在去安裝VirtualStudio就能跑phpinfo,不知道是不是WindowsUpdate的時候就已經裝上。
另外也沒有遇到錯誤訊息和設定時區的問題,不知道是不是新版的PHP和IIS有修附相關問題XD。