代碼邏輯正確,目錄權限 chmod 777,但 move_uploaded_file 返回 false,上傳失敗。
**SELinux (Security-Enhanced Linux) 強制訪問控制** 禁止 httpd 進程寫入該目錄,即使 DAC 權限(rwx)允許。
setenforce 0
vi /etc/selinux/config
# SELINUX=enforcing → SELINUX=disabled
# 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
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 上下文或策略。