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

解決 PHP「Failed opening required」錯誤:Windows IIS 權限設定指南

     編輯:PHP 相關知識

在 Windows Server 2003 + IIS 6 + PHP 5 環境下部署 ECShop 等 PHP 應用時,常遇到 Warning: require(../includes/init.php) failed to open stream 錯誤。本文分析根本原因並提供完整權限設定解決方案。

錯誤現象

Warning: require(../includes/init.php) [function.require]: failed to open stream: 
No such file or directory in C:\AppServ\www\index.php on line 22

Fatal error: require() [function.require]: Failed opening required '../includes/init.php' 
(include_path='.;C:\php5\pear') in C:\AppServ\www\index.php on line 22

根本原因分析

這不是路徑錯誤,而是目錄權限繼承問題:

  • PHP 程式只能在擁有正確權限的子目錄中執行
  • 網站根目錄的上層目錄權限必須與根目錄一致
  • IIS 執行帳號(如 web_ecshop)必須擁有完整讀取/執行權限

錯誤的權限架構

D:\ (administrator)
└── Web\ (administrator)           ← 網站容器目錄
    └── ecshop\ (administrator)    ← 網站根目錄 ❌ 缺少 IIS 帳號
        ├── Data\ (administrator + web_ecshop)
        └── Web\ (administrator + web_ecshop)

正確的權限架構

D:\ (administrator)
└── Web\ (administrator + web_ecshop)  ← 容器目錄需包含 IIS 帳號
    └── ecshop\ (administrator + web_ecshop)  ← 根目錄繼承上層權限 ✅
        ├── Data\ (繼承)
        └── Web\ (繼承)

具體設定步驟

  1. 右鍵點選網站容器目錄(如 D:\Web) → 「內容」 → 「安全性」
  2. 點選「編輯」 → 「新增」 → 輸入 IIS 執行帳號(如 web_ecshop)
  3. 給予「讀取和執行」、「列出資料夾內容」、「讀取」權限
  4. 勾選「將可繼承的權限傳播給所有子物件」
  5. 對網站根目錄(ecshop)重複上述操作,確保權限繼承正確
  6. 重新啟動 IIS 服務(iisreset)

驗證方法

在網站根目錄建立測試檔 test.php:

<?php
require('../includes/init.php');
echo '載入成功';

瀏覽器存取 https://localhost/test.php,若顯示「載入成功」即表示權限設定正確。

補充說明

  • 此問題在 Windows 2008/2012 + IIS 7/8 同樣存在,解決邏輯相同
  • 若使用 PHP 內建伺服器(php -S)開發時不會遇到此問題
  • 生產環境建議使用專用的應用程式集區身分識別而非共用帳號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved