首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

IIS 運行 PHP 常見錯誤排查:No input file specified 與權限問題

     編輯:PHP 綜合知識

現象回顧

在 IIS 7+ 部署 PHP (FastCGI) 時,常遇到兩類錯誤:

  1. Warning: require_once(./include/common.inc.php) failed to open stream: No such file or directory 並伴隨 Fatal error
  2. 瀏覽器直接顯示 No input file specified.

根因分析

錯誤核心原因關鍵檢查點
require_once 失敗PHP 腳本工作目錄非預期,相對路徑解析錯誤include_path、cwd、FastCGI 應用程式池身分
No input file specifiedIIS 無法將請求正確映射到實體 PHP 檔案處理常對應、權限、doc_root、應用程式池

逐步排查清單

1. 確認 PHP 擴展對應

IIS 管理器 → 網站 → 處理常式對應 → 確認 *.php 對應至 C:\php\php-cgi.exe (或 php-fpm.exe),請求限制 → 動作 → 指令碼 勾選。

2. 檢查 php.ini 關鍵設定

; 必須註釋或指向正確網站根目錄
; doc_root = "C:\inetpub\wwwroot"

; 建議開啟
cgi.force_redirect = 0
cgi.fix_pathinfo = 1
fastcgi.impersonate = 1

3. 權限設定 (最常見)

  • 網站實體目錄 (如 E:\mysite\www.example.com) 需給 IIS_IUSRS 或應用程式池身分 (如 IIS AppPool\MySitePool) 讀取/執行 權限。
  • 父目錄 同樣需給予 列出資料夾/讀取資料 權限,否則 FastCGI 進程無法遍歷路徑,導致 No input file specified。

4. 應用程式池身分與載入用戶設定檔

  • 進階設定 → 身分識別:建議用 ApplicationPoolIdentity (預設),安全且自動管理權限。
  • 載入用戶設定檔 = True:某些 PHP 擴展 (如 COM、SQL Server 驅動) 需要用戶配置檔才能正常工作。

5. FastCGI 設定

# 在命令列執行 (管理員)
%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

6. 相對路徑改絕對路徑

程式碼中盡量使用 __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 即可快速定位路徑與權限問題。

總結

  1. 90% 的 No input file specified 是 父目錄權限缺失 或 處理常式對應錯誤。
  2. 剩餘 10% 多為 doc_root 設定衝突或 FastCGI 進程身分不足。
  3. 養成 絕對路徑、專用應用程式池、最小權限原則 習慣,可徹底杜絕此類問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved