Microsoft IIS/PWS

本節內含針對 IIS(Microsoft Internet Information Server)的說明與提示。

警示

若果使用 CGI 模式安裝,則伺服器對於某些可能的攻擊是開放的。請閱讀 CGI 安全一章以學習如何防禦這些攻擊。

PHP 與 IIS 安裝的通用事項

  • 首先請閱讀手動安裝步驟。不要略過這一步,這裡提供了將 PHP 安裝到 Windows 中的極其重要的訊息。

  • CGI 會員必須在 php.ini 中將 cgi.force_redirect 指令設為 0。其重要細節請閱讀 FAQ 中的cgi.force_redirect。此外,CGI 會員可能需要設定 cgi.redirect_status_env 指令。在使用這些指令時,確保它們沒有在 php.ini 中被注解掉。

  • PHP 4 的 CGI 檔案名是 php.exe 而在 PHP 5 中是 php-cgi.exe。在 PHP 5 中,php.exe 是 CLI 版本,不是 CGI。

  • 修改 Windows 的 PATH 環境變量以把 PHP 目錄內含進去。這樣 PHP 的 DLL 檔案,可執行檔案和 php.ini 就都可以保留在 PHP 目錄中而不用把 Windows 系統目錄搞亂了。更多細節見 FAQ 中的設定路徑 PATH

  • IIS 私人會員(通常為 IUSR_MACHINENAME)需要能夠讀取各個檔案和目錄的權限,例如 php.ini,docroot 和 session 的 tmp 目錄。

  • 確保在 php.ini 中正確設定了 extension_dirdoc_root 指令的值。這些指令依賴於 PHP 被安裝的系統。在 PHP 4 中,extension_dir 是 extensions 而在 PHP 5 中是 ext。因此在 PHP 5 中 extensions_dir 的一個取值例子是 "c:\php\ext",IIS 的 doc_root 的取值例子是 "c:\Inetpub\wwwroot"

  • PHP 增加庫的 DLL 檔案,如 php_mysql.dllphp_curl.dll,存放於 PHP 下載的 ZIP 包中(自動安裝包裡沒有)。在 PHP 5 中,很多增加庫都是 PECL 的一部分,可以從「Collection of PECL modules」包中下載,例如 php_zip.dllphp_ssh2.dll點閱進入 PHP 下載頁

  • 在定義套用程式副檔名映射時,應選中「檢查檔案是否存在」。以極小的效能為代價,IIS(或是 PWS)會在呼叫 PHP 之前檢查腳本檔案是否存在並選出認證方法。這意味著 web 伺服器會提供一個有道理的 404 形式錯誤訊息而不是一條 CGI 錯誤說什麼 PHP 沒有輸出任何資料。

Windows NT/200x/XP 和 IIS 4 或更高版本

PHP 可以安裝為 CGI 或是 ISAPI 模組。不管哪種,都需要啟動 Microsoft 管理控制台(也可能是「Internet 訊息服務」,在 Windows NT 4.0 Option Pack 中或是在 Windows 2000/XP 下的控制台=>管理工具)。然後右鍵點閱 web 伺服器節點(通常為「預設網站」),並選取「屬性」。

若果想用 CGI 模式,按如下方法進行:

  • 選取「主目錄」,「虛擬目錄」或「目錄」標籤頁,然後進行:

  • 將執行權限改為「純腳本」

  • 點「配置」按鈕,選取「映射」標籤頁。點閱「增加」按鈕,將「可執行檔案」指向適當的 CGI 檔案名。例如 PHP 5 的值可能是:C:\php\php-cgi.exe。在「副檔名」中填入 .php。選取「全部動作」(或是「限制為」留空),選中「腳本引擎」。然後點閱「確定」。

  • 設定合適的目錄安全性(在 Internet 訊息服務中完成)。若果 NT 伺服器使用 NTFS 檔案系統,給 I_USR_ 會員加上 php.exe/php-cgi.exe 檔案所在目錄的可執行權限(通過資源管理器完成)。

要用 ISAPI 模組模式,按如下方法進行:

  • 若果不想用 PHP 進行 HTTP 認證,應該略過這一步。在「ISAPI 篩選器」標籤頁中增加一個新的 ISAPI 篩選器。「篩選器名稱」設為 PHP,「可執行檔案」設為 php4isapi.dll/php5isapi.dll 的路徑。

  • 選取「主目錄」,「虛擬目錄」或「目錄」標籤頁,然後進行:

  • 將執行權限改為「純腳本」

  • 點「配置」按鈕,選取「映射」標籤頁。點閱「增加」按鈕,將「可執行檔案」指向適當的 ISAPI DLL。例如 PHP 5 的值可能是:C:\php\php5isapi.dll。在「副檔名」中填入 .php。選取「全部動作」(或是「限制為」留空),選中「腳本引擎」。然後點閱「確定」。

  • 完全停止 IIS(NET STOP iisadmin)

  • 重新啟動 IIS(NET START w3svc)

對於 IIS 6(2003 Server),開啟 IIS 管理器,進入 web 服務增加,點閱「增加一個新的 web 服務增加」,「副檔名」中輸入名稱,例如 PHP,再點閱「增加」按鈕,點閱「瀏覽」選取要麼 ISAPI 檔案(php4isapi.dllphp5isapi.dll)或是 CGI 檔案(php.exephp-cgi.exe)作為「檔案路徑」後點「確定」,然後選中「設定增加狀態為容許」並點「確定」。

要使用 index.php 作為預設文件,在「文件」標籤頁中選取「增加」。輸入 index.php 並點「確定」。用上下箭頭按鈕調整順序。這和在 Apache 中設定 DirectoryIndex 相似。

對於每個要關聯為 PHP 腳本的副檔名都要重複以上步驟。.php 是最常用的,此外為相容一些遺留下來的老程式可能還需要加上 .php3

若果過些時候之後碰到 CPU 佔用率達到 100%,則取消選中「暫存 ISAPI 套用程式」(「主目錄」下點「配置」按鈕」)。

Windows 和 PWS 4

PWS 4 不支援 ISAPI,只能使用 PHP CGI。

  • 編輯包裡附上的 pws-php4cgi.reg/pws-php5cgi.reg 檔案(PHP 4 在 SAPI 目錄下,PHP 5 在主目錄下)改為自己的 php.exe/php-cgi.exe 檔案的路徑。反斜線應雙寫,例如:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] ".php"="C:\\php\\php.exe"(若果用 PHP 5 則改為 C:\\php\\php-cgi.exe)。然後將此註冊表檔案合併入系統;滑鼠按兩下此檔案即可。

  • 在 PWS 管理器中,右鍵點閱需要加入 PHP 支援的目錄並選取「屬性」。選中「執行」,並確認。

Windows 和 PWS/IIS 3

配置此伺服器的推薦方法是使用隨包發佈的註冊表檔案(PHP 4 是 SAPI 目錄下的 pws-php4cgi.reg,PHP 5 是主目錄下的 pws-php5cgi.reg)。可能要編輯此檔案已確保其中的 PHP 安裝目錄和增加庫目錄符合會員自己的設定。或是按以下步驟手動完成。

警示

以下步驟涉及到直接動作 Windows 註冊表。若果出錯可能使系統不穩定,強烈建議先備份註冊表。若果會員損壞了註冊表 PHP 開發組不負任何責任。

  • 運行 Regedit。

  • 找到:HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap

  • 在編輯選單選取:新增->字串值

  • 輸入 PHP 腳本想要使用的副檔名,例如 .php

  • 按兩下新增的字串值並在「數值資料」欄裡輸入 php.exe 的路徑,例如 PHP 4 是 C:\php\php.exe "%s" %s,或是 PHP 5 是 C:\php\php-cgi.exe "%s" %s

  • 對每個要關聯為 PHP 腳本的檔案副檔名名重複以上步驟。

以下步驟不影響 web 伺服器安裝,僅適用於想在指令行下運行 PHP 腳本(例如運行 C:\myscripts\test.php)或是在資源管理器視窗中按兩下檔案名就運行程式。若果更希望按兩下 PHP 檔案名是將其調入文字編輯器,則略過以下步驟。

  • 找到:HKEY_CLASSES_ROOT

  • 在編輯選單選取:新增->項

  • 將新項命名為前一節設的副檔名,例如:.php

  • 選中新項,在右邊欄按兩下「預設」並輸入 phpfile

  • 對每個在前一節設定的副檔名都重複以上步驟。

  • HKEY_CLASSES_ROOT 下再建立另一個新增->項 並命名為 phpfile

  • 選中新項 phpfile,在右邊欄按兩下「預設」並輸入 PHP Script

  • 右鍵點閱 phpfile 項並選取新增->項,命名為 Shell

  • 右鍵點閱 Shell 項並選取新增->項,命名為 open

  • 右鍵點閱 open 項並選取新增->項,命名為 command

  • 選中新項 command,在右邊欄按兩下「預設」並輸入 php.exe 的路徑,例如:c:\php\php.exe -q %1(不要忘了 %1)。

  • 離開 Regedit。

  • 若果是 Windows 下的 PWS,重啟動以重新加載註冊表。

PWS 和 IIS 3 的會員現在就擁有了完全可運作的系統。IIS 3 會員可以使用來自 Steven Genusa 的漂亮工具來配置腳本映射。