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

Linux 環境 PHP 檔案上傳完整注意事項:權限、配置、目錄自動建立

     編輯:PHP 綜合知識

1. 上傳目錄權限設定

# 遞歸賦予讀寫執行權限(開發環境可用,生產請最小權限原則)
chmod -R 777 /var/www/html/uploads

# 或針對特定目錄
chmod a+rwx /var/www/html/uploads

確保 Web 伺服器使用者(www-data、apache、nginx)具寫入權限。

2. 取得專案根目錄路徑

$siteRoot = dirname(__FILE__); // PHP 5.3+ 推薦 __DIR__
$uploadDir = $siteRoot . '/uploads/';

3. php.ini 上傳大小限制

post_max_size = 200M
upload_max_filesize = 200M
max_execution_time = 300
max_input_time = 300

修改後需重啟 PHP-FPM/Apache 生效。

4. 依日期自動建立多層目錄

$aimUrl = str_replace('\\', '/', $aimUrl); // 統一分隔符
$aimDir = '';
$parts = explode('/', $aimUrl);
foreach ($parts as $part) {
    $aimDir .= $part . '/';
    if (!file_exists($aimDir)) {
        mkdir($aimDir, 0777, true); // true 遞歸建立
        chmod($aimDir, 0777);
    }
}

適用於 uploads/2024/01/15/ 等結構。

5. 安全性補強(生產環境必做)

  • 驗證 MIME 型別:finfo_file() 或 mime_content_type()
  • 副檔名白名單:in_array($ext, ['jpg','png','pdf'])
  • 檔案重命名:md5(time().rand()).'.'.$ext 避免覆蓋與執行
  • 上傳目錄禁止腳本執行:Nginx location ~ \.php$ { deny all; }、Apache SetHandler default-handler
  • 病毒掃描整合(ClamAV 等)

6. 完整上傳處理範例

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $tmp = $_FILES['file']['tmp_name'];
    $ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
    if (!in_array($ext, ['jpg','png','gif','pdf'])) {
        die('副檔名不允許');
    }
    $newName = md5_file($tmp) . '.' . $ext;
    $dateDir = date('Y/m/d/');
    $targetDir = $uploadDir . $dateDir;
    if (!is_dir($targetDir)) mkdir($targetDir, 0755, true);
    $target = $targetDir . $newName;
    if (move_uploaded_file($tmp, $target)) {
        echo "上傳成功:$target";
    } else {
        echo "移動失敗";
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved