在 IIS 7+ 部署 PHP (FastCGI) 時,常遇到兩類錯誤:
Warning: require_once(./include/common.inc.php) failed to open stream: No such file or directory 並伴隨 Fatal error| 錯誤 | 核心原因 | 關鍵檢查點 |
|---|---|---|
| require_once 失敗 | PHP 腳本工作目錄非預期,相對路徑解析錯誤 | include_path、cwd、FastCGI 應用程式池身分 |
| No input file specified | IIS 無法將請求正確映射到實體 PHP 檔案 | 處理常對應、權限、doc_root、應用程式池 |
IIS 管理器 → 網站 → 處理常式對應 → 確認 *.php 對應至 C:\php\php-cgi.exe (或 php-fpm.exe),請求限制 → 動作 → 指令碼 勾選。
; 必須註釋或指向正確網站根目錄
; doc_root = "C:\inetpub\wwwroot"
; 建議開啟
cgi.force_redirect = 0
cgi.fix_pathinfo = 1
fastcgi.impersonate = 1
E:\mysite\www.example.com) 需給 IIS_IUSRS 或應用程式池身分 (如 IIS AppPool\MySitePool) 讀取/執行 權限。No input file specified。ApplicationPoolIdentity (預設),安全且自動管理權限。# 在命令列執行 (管理員)
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\php\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\php\php-cgi.exe'].environmentVariables.[name='PHPRC',value='C:\php']" /commit:apphost
程式碼中盡量使用 __DIR__ 或 dirname(__FILE__) 建構路徑,避免 ./include/... 受 cwd 影響。
<?php
// 放在網站根目錄 test.php
echo 'SCRIPT_FILENAME: ' . $_SERVER['SCRIPT_FILENAME'] . "\n";
echo 'DOCUMENT_ROOT: ' . $_SERVER['DOCUMENT_ROOT'] . "\n";
echo 'cwd: ' . getcwd() . "\n";
echo 'include_path: ' . get_include_path() . "\n";
echo 'User: ' . get_current_user() . "\n";
@include './include/common.inc.php' ? 'include OK' : 'include FAIL';
?>
訪問 https://site/test.php 即可快速定位路徑與權限問題。
No input file specified 是 父目錄權限缺失 或 處理常式對應錯誤。doc_root 設定衝突或 FastCGI 進程身分不足。