IIS 7.5 - 建立 PHP 執行環境
這篇文章主要是介紹如何在 IIS 上手動設定 PHP 的執行環境,雖然有 Web Platform Installer (WebPI) 可以自動安裝,但是手動安裝可以自己掌握需要安裝的項目。
檔案準備
- PHP (x86 Non Thread Safe, VC11)
http://windows.php.net/download/ - Visual Studio 2012 Update 4 的 Visual C++ 可轉散發套件 (x86)
http://www.microsoft.com/zh-tw/download/details.aspx?id=30679
Thread Safe 與 Non Thread Safe 的選擇
設定 FastCGI 以裝載 PHP 應用程式 (IIS 7) 提到:
建議您搭配 IIS 7 FastCGI 使用 PHP 的非安全執行緒組建。 PHP 的非安全執行緒組建由於不進行任何執行緒安全性檢查,所提供的效能明顯比標準組建高。 這些檢查並非必要,因為 FastCGI 可保證單一執行緒執行環境。
PHP For Windows 也提到:
If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.
所以就照建議選擇 Non Thread Safe,Windows 的 PHP x64 版還屬於實驗性質,暫時就先不考慮,因為是使用 VC11 編譯,所以必須安裝 Visual Studio 2012 的 Visual C++ 可轉散發套件。
安裝 Visual Studio 2012 Update 4 的 Visual C++ 可轉散發套件
使用 VC11 編譯的 PHP 需安裝 Visual Studio 2012 的 Visual C++ 可轉散發套件,安裝過程就一直點選下一步。
解壓縮 PHP 檔案
- 解壓縮下載回來的 PHP,本例是放在
C:\Program Files (x86)\PHP
,不過建議路徑中不要有空白,有時候會帶來困擾。 - 複製 php.ini-production 成為 php.ini。
設定 PHP (php.ini)
extension_dir = "C:\Program Files (x86)\PHP\ext"
# Extension 路徑。
error_log = "C:\Windows\Temp\php_errors.log"
# 錯誤記錄檔路徑。
upload_tmp_dir = "C:\Windows\Temp"
# 檔案上傳暫存路徑,非必要,不設定時會存在預設的地方。
session.save_path = "C:\Windows\Temp"
# Session 存放路徑,非必要,不設定時會存在預設的地方。
open_basedir = "根目錄"
# 所有站台的根目錄,程式若存取這個目錄以外的檔案將會出錯。
# 如果有多站台時可選擇的方式:
# 1. 用:分隔目錄。
# 2. 不設定,在 IIS 建立處理常式對應時當作引數傳入 (建議)。
date.timezone = "Asia/Taipei"
# 時區。
upload_max_filesize = 2M
# 檔案上傳的大小限制,預設是 2MB,視需要調整。
post_max_size = 8M
# POST 到網站的資料大小限制,預設是 8MB,視需要調整。
# 需比 upload_max_filesize 大,因為 POST 時不只有檔案資料而已。
extension = xxx.dll
# 設定要載入的 extension。
# Windows Extensions 區段有 extension 的清單,以 extension = xxx.dll 的形式存在。
# 啟用需要的 extension 只要取消註解 (;) 就可以啟用。
# 例如需要 pdo_mysql.dll,取消註解改成 extension=php_pdo_mysql.dll 即可。
cgi.force_redirect = 0
cgi.fix_pathinfo = 1
fastcgi.impersonate = 1
fastcgi.logging = 0
# CGI 及 FastCGI 設定,在 IIS 上執行時需要。
安裝 IIS CGI 服務
Windows Server 2008 R2
- 開啟 [伺服器管理員],在左側樹狀目錄選擇 角色 > 網頁伺服器(IIS)。
- 點選 [新增角色服務]。
- 安裝 網頁伺服器 > 應用程式開發 > CGI 服務。
Windows 7
- 開啟 [控制台] > [程式與功能] > [開啟或關閉 Windows 功能]
- 安裝 Internet Information Services > World Wide Web 服務 > 應用程式開發功能 > CGI 功能
設定 IIS 處理 PHP 請求(共用同一個 FastCGI 應用程式的作法)
開啟 Internet Information Services (IIS) 管理員。
建立 FastCGI 應用程式
- 進入伺服器層級的 [FastCGI 設定]。
- 點選 [新增應用程式]。
- 完整路徑:
C:\[PHP路徑]\php-cgi.exe
- 例項 MaxRequests:
10000
- 環境變數: 點一下
...
,開啟 EnvironmentVariables 集合編輯器,新增一組環境變數
Name:PHP_FCGI_MAX_REQUESTS
Value:10000
- instanceMaxRequests 及 PHP_FCGI_MAX_REQUESTS 是設定 FastCGI 及 PHP 的處理序回收行為。
- 必須讓 FastCGI 在原生 PHP 回收啟動前先回收 php-cgi.exe 處理序,instanceMaxRequests 的值必須小於或等於 PHP_FCGI_MAX_REQUESTS,確保原生 PHP 處理序回收邏輯永遠不會啟動。
- 完整路徑:
設定處理常式對應處理 PHP 請求
- 建立好 FastCGI 應用程式之後,必須讓 IIS 可以正確處理 PHP 請求。
- 進入伺服器層級的 [處理常式對應]。(如果有多個站台但只想讓特定的站台支援 PHP,在站台節點選擇你要的站台。)
- 點選 [新增模組對應]。
- 要求路徑:
*.php
- 模組:
FastCgiModule
- 執行檔:
"C:\[PHP路徑]\php-cgi.exe"
(必須和新增 FastCGI 應用程式時輸入的 [完整路徑] 相同) - 名稱:
PHP via FastCGI
- 要求限制
在 [對應] 頁籤勾選 [只有當要求對應到下列項目時才啟動處理常式]
選擇 [檔案或資料夾] - 點選確定,出現以下訊息請點選 [否],因為在上一個步驟已經建立好了。
是否要為此執行檔建立 FastCGI 應用程式?按一下[是],即可將項目加入 FastCGI 集合,並使此執行檔以 FastCGI 應用程式的身分執行。
- 要求路徑:
設定 IIS 處理 PHP 請求(每個站台有自己的 FastCGI 應用程式的作法)
如果你習慣一個站台分配一個專屬的應用程式集區,那可以考慮這種作法,一個 FastCGI 應用程式池是由完整路徑與引數組合的字串當作識別,藉由設定不同的引數可以讓每個網站有自己的 FastCGI 應用程式池。
建立 FastCGI 應用程式
- 完整路徑:
C:\[PHP路徑]\php-cgi.exe
- 引數:
-d open_basedir=[網站程式路徑]
例如C:\Websites\Website1\
- 其餘的參數請照之前的說明設定。
設定處理常式對應處理 PHP 請求
- 進入 [處理常式對應],新增模組對應(因為是針對個別站台,所以必須在站台層級設定)。
- 執行檔:
[完整路徑]|[引數]
例如C:\[PHP路徑]\php-cgi.exe|-d open_basedir=C:\Websites\Website1\
如果路徑中有空白字元,需用 " (雙引號) 包起來。 - 其餘的參數請照之前的說明設定。
- 使用IIS管理員新增時,執行檔參數最後面可能會多
"
("
) 字元,必須刪除。- 開啟 站台根目錄\web.config
- 在
handlers
區段找到剛剛新增的項目,確認scriptProcessor
參數等於[完整路徑]|[引數]
。<handlers> <add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\[PHP路徑]\php-cgi.exe|-d open_basedir=C:\Websites\Website1\"" resourceType="Either" /> </handlers>
設定預設文件
這一步不是必要的,如果訪客瀏覽時沒有指定檔名,IIS 會依序尋找清單上的檔案。
- 進入 [預設文件]。
- 加入
index.php
。
設定網站資料夾的權限
IUSR
- 讀取和執行
- 列出資料夾內容
- 讀取
子目錄或檔案若是需要寫入時再加上修改權限
IIS AppPool\應用程式集區名稱 或 IIS_IUSRS
- 讀取和執行
- 列出資料夾內容
- 讀取
備註:
- 若設定 open_basedir 後發生錯誤,試著將 open_basedir 上一層的目錄賦予 IUSR 及 IIS AppPool\應用程式集區名稱權限。
測試
將以下內容存成 info.php 放到網站根目錄
123phpinfo();使用瀏覽器開啟 http://localhost/info.php ,若看到 PHP 資訊就表示安裝成功
- 刪除 info.php
Reference
Windows 系统下的安装 - 手工安装步骤
http://tw1.php.net/manual/zh/install.windows.manual.php
設定 FastCGI 以裝載 PHP 應用程式 (IIS 7)
http://technet.microsoft.com/zh-tw/library/dd239230%28v=ws.10%29.aspx
如何在 IIS 建立 PHP 程式檔案
https://www.microsoft.com/taiwan/technet/iis/learn/iis_php_establish.aspx
Using FastCGI to Host PHP Applications on IIS 7
http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/using-fastcgi-to-host-php-applications-on-iis
修改PHP程序高级FastCGI设置
http://winsystem.ctocio.com.cn/101/9477601.shtml