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

PHP 圖片上傳並替換指定文件完整實現(HTML 表單 + 處理邏輯)

     編輯:PHP 相關知識

PHP 圖片上傳並替換指定文件完整實現

常見需求:用戶上傳新圖片覆蓋固定路徑的舊圖(如站點 Logo、用戶頭像)。本文提供前端表單與後端處理完整代碼,含類型校驗、大小限制、臨時文件移動、舊文件刪除、預覽回顯。

前端表單 change.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>圖片替換</title></head>
<body>
<form method="post" action="changefile.php" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <label>選擇圖片:<input type="file" name="file" accept="image/*"></label>
    <button type="submit" name="submit">上傳替換</button>
</form>
</body></html>

後端處理 changefile.php

<?php
header('Content-Type: text/html; charset=utf-8');

function changeFile($targetPath) {
    $allowed = ['jpg', 'jpeg', 'gif', 'bmp', 'png'];
    $filename = $_FILES['file']['name'];
    $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

    if (!in_array($ext, $allowed)) {
        echo '<center>僅允許上傳:' . implode(', ', $allowed) . '</center>';
        return;
    }

    // 刪除舊文件
    if (file_exists($targetPath)) unlink($targetPath);

    // 移動上傳文件
    if (is_uploaded_file($_FILES['file']['tmp_name'])) {
        if (move_uploaded_file($_FILES['file']['tmp_name'], $targetPath)) {
            echo "<center>上傳成功!預覽:<br><img src='$targetPath'></center>";
        } else {
            echo '<center>移動文件失敗,請檢查目錄權限</center>';
        }
    } else {
        echo '<center>非法上傳或文件超過 2MB</center>';
    }
}

// 目標文件固定路徑
changeFile(__DIR__ . '/files/1.png');
?>

關鍵點解析

  1. enctype="multipart/form-data":必須設置,否則 $_FILES 為空。
  2. MAX_FILE_SIZE:隱藏域限制客戶端上傳大小(瀏覽器不強制執行,服務端仍需校驗)。
  3. $_FILES['file']['tmp_name']:PHP 將上傳文件暫存於系統臨時目錄,需 move_uploaded_file 移至目標位置。
  4. is_uploaded_file():防止偽造 $_FILES 數據的安全檢查。
  5. unlink() 先刪後存:確保目標路徑始終只保留最新圖片。

生產環境加固建議

  • 使用 getimagesize() 二次驗證 MIME 類型,防偽裝腳本。
  • 文件名採用 md5(time().rand()).'.'.$ext 避免衝突,資料庫記錄映射關係。
  • 上傳目錄設定 php_flag engine off 或 Nginx location ~ \.php$ { deny all; } 禁用腳本執行。
  • 引入圖片壓縮庫(如 intervention/image)統一尺寸與質量。

此最小化實現適合快速原型,企業級項目建議使用成熟上傳組件(如 Laravel MediaLibrary、Uploader)。

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