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

PHP move_uploaded_file 失敗:CentOS 7 SELinux 禁止寫入

     編輯:程式設計綜合問答

現象

代碼邏輯正確,目錄權限 chmod 777,但 move_uploaded_file 返回 false,上傳失敗。

根本原因

**SELinux (Security-Enhanced Linux) 強制訪問控制** 禁止 httpd 進程寫入該目錄,即使 DAC 權限(rwx)允許。

解決方案

  1. 臨時關閉 SELinux 驗證(立即生效,重啟失效):
    setenforce 0
  2. 永久關閉(需重啟):
    vi /etc/selinux/config
    # SELINUX=enforcing → SELINUX=disabled
  3. 正規做法:設置正確 SELinux 上下文(推薦生產環境):
    # 1. 設置類型為 httpd 可讀寫
    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/fundamentals_of_compiling/upload(/.*)?"
    # 2. 恢複上下文
    restorecon -Rv /var/www/html/fundamentals_of_compiling/upload

驗證

ls -Z /var/www/html/fundamentals_of_compiling/upload
# 應顯示 unconfined_u:object_r:httpd_sys_rw_content_t:s0

補充檢查

  • PHP upload_tmp_dir 目錄同樣需正確上下文。
  • php.ini 中 file_uploads = On、upload_max_filesize、post_max_size 設置合理。
  • 錯誤日誌 /var/log/httpd/error_log 可見 SELinux 拒絕記錄(avc: denied)。

CentOS/RHEL 7+ 默認啟用 SELinux,**文件權限 777 不代表進程能訪問**,必須配置 SELinux 上下文或策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved