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

CodeIgniter mkdir 權限問題:字串 '777' vs 八進位 0777 導致目錄不可寫

     編輯:PHP 相關知識

CodeIgniter mkdir 權限問題:字串 '777' vs 八進位 0777

在 Linux (CentOS) 部署 CodeIgniter 專案時,使用 mkdir($path, '777') 建立上傳目錄,雖然程式不報錯,但實際權限異常導致 move_uploaded_file() 失敗,錯誤訊息:A problem was encountered while attempting to move the uploaded file to the final destination.

錯誤代碼

<?php
// 錯誤:傳入字串 '777'
if (!is_dir($cache_path)) mkdir($cache_path, '777');
?>

正確代碼

<?php
// 正確:傳入八進位整數 0777 (注意前導 0)
if (!is_dir($cache_path)) mkdir($cache_path, 0777);
?>

根因分析

  • PHP mkdir() 第二參數 $mode 需為 八進位整數
  • '777' 是字串,PHP 會嘗試轉型為整數 777 (十進位),對應八進位 1411,權限位元完全錯誤
  • 0777 是八進位字面值,十進位值為 511,正確對應 rwxrwxrwx

Linux 手動補救指令

# 建立目錄並設定正確權限
mkdir -p /var/www/html/uploads
chmod 777 /var/www/html/uploads

# 或針對特定用戶 (建議生產環境)
chown -R www-data:www-data /var/www/html/uploads
chmod -R 755 /var/www/html/uploads

最佳實踐建議

  1. 程式碼中統一使用 0777、0755 等八進位字面值
  2. 生產環境避免 777,採用 0755 + 正確擁有者 (www-data/nginx/php-fpm user)
  3. 部署腳本中以 mkdir -p + chown + chmod 一次到位,減少 PHP 執行時建目錄
  4. CI 專案可在 index.php 或 constants.php 定義 UPLOAD_DIR 常量,統一管理路徑與權限

相關知識點

  • chmod +x 目錄:目錄需 執行權限 (x) 才能 cd 進入或遍歷
  • 上傳類庫的 save_path 相對於 index.php,確保路徑正確
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved