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

PHP include 權限錯誤 failed to open stream: Permission denied 解決方案

     編輯:PHP 相關知識

Warning: include(): failed to open stream: Permission denied 核心原因:**Web 服務器進程用戶(如 www-data、apache、nginx、IUSR)無讀取目標文件/目錄的權限**。本文提供 Linux、Windows (IIS/Apache) 兩大平台的排查步驟與修復命令。

錯誤現象解析

Warning: include(/global.php): failed to open stream: Permission denied in index.php on line 21
Warning: include(): Failed opening '/global.php' for inclusion (include_path='.;C:\php5\pear')
Fatal error: Class 'fl_global' not found...

第一行 Permission denied 是根因,後續 Class not found 只是連鎖反應。

Linux 環境修復

1. 確認 Web 進程用戶

ps aux | grep -E 'nginx|apache|php-fpm' | head -5
# 典型輸出:www-data、nginx、apache、php-fpm

2. 檢查文件/目錄權限

ls -la /var/www/html/global.php
# -rw-r--r-- 1 root root 1234 Jan 1 00:00 global.php  ← 屬主 root,其他用戶可讀 ✅
# -rw------- 1 root root 1234 Jan 1 00:00 global.php  ← 其他用戶不可讀 ❌

3. 修復權限(最小權限原則)

# 方案 A:授予其他用戶讀取權(通用)
chmod 644 /var/www/html/global.php
chmod 755 /var/www/html/           # 目錄需執行權限才能進入

# 方案 B:修改屬組為 Web 用戶組(推薦生產)
chown -R www-data:www-data /var/www/html/
# 或
chown -R nginx:nginx /var/www/html/

# 方案 C:ACL 精細控制(不改屬主)
setfacl -R -m u:www-data:rX /var/www/html/
setfacl -R -m d:u:www-data:rX /var/www/html/ # 默認 ACL,新文件自動繼承

4. SELinux / AppArmor 檢查(常被忽略)

# CentOS/RHEL 檢查 SELinux
getenforce # Enforcing 表示開啟
ls -Z /var/www/html/global.php # 查看安全上下文
# 若類型非 httpd_sys_content_t,需恢復
restorecon -Rv /var/www/html/

# 臨時關閉測試(生產勿用)
setenforce 0

Windows (IIS / Apache) 修復

IIS (IUSR / ApplicationPoolIdentity)

  1. 右鍵網站根目錄 → 「屬性」→ 「安全性」標籤。
  2. 點「編輯」→ 「添加」→ 輸入 IIS_IUSRS 或具體應用程序池身份 IIS AppPool\YourPoolName。
  3. 授予「讀取和執行」、「列出資料夾內容」、「讀取」權限。
  4. 勾選「替換子物件權限條目...」遞歸應用。

Apache on Windows (手動配置用戶)

# httpd.conf 中指定運行用戶(需該用戶存在)
User apache_user
Group apache_group

# 然後在文件夾屬性→安全性中給 apache_user 讀取權限

快速排查清單

檢查項命令/操作正常標準
文件存在ls -l /path/to/file存在、非斷鏈
目錄可進入sudo -u www-data ls /path/to/dir目錄有 x 權限
文件可讀sudo -u www-data cat /path/to/file輸出內容無報錯
open_basedirphp -i | grep open_basedir包含目標路徑或未限制
SELinux/AppArmorgetenforce / aa-statusPermissive/Disabled 或正確上下文
PHP 進程用戶ps aux | grep php-fpm與文件權限匹配

避坑提醒

  • ❌ chmod 777 臨時解決但極不安全,嚴禁生產使用。
  • ❌ 只給文件權限不給目錄 x 權限,Web 進程無法 cd 進入目錄讀取文件。
  • ✅ 使用 chown www-data:www-data + chmod 750/640 + ACL 實現最小權限。
  • ✅ 部署腳本中加入權限修正步驟,避免手動部署遺漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved