在 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);
?>
mkdir() 第二參數 $mode 需為 八進位整數'777' 是字串,PHP 會嘗試轉型為整數 777 (十進位),對應八進位 1411,權限位元完全錯誤0777 是八進位字面值,十進位值為 511,正確對應 rwxrwxrwx# 建立目錄並設定正確權限
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
0777、0755 等八進位字面值0755 + 正確擁有者 (www-data/nginx/php-fpm user)mkdir -p + chown + chmod 一次到位,減少 PHP 執行時建目錄index.php 或 constants.php 定義 UPLOAD_DIR 常量,統一管理路徑與權限chmod +x 目錄:目錄需 執行權限 (x) 才能 cd 進入或遍歷save_path 相對於 index.php,確保路徑正確