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

PHP 簡易圖片上傳系統實現指南

     編輯:程式設計綜合問答

需求分析

  • 前端表單字段:ID、name、pictureID、picturename、picturefile、savetime、class
  • 圖片文件存儲至服務器目錄
  • 文件路徑存入數據庫
  • 另一頁面展示圖片信息,提供鏈接查看圖片

核心實現步驟

1. 數據庫設計

CREATE TABLE pictures (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    picture_id VARCHAR(50),
    picture_name VARCHAR(255),
    picture_path VARCHAR(500),  -- 存儲相對路徑
    save_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    class VARCHAR(50)
);

2. 上傳表單 (upload.html)

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="text" name="name" placeholder="名稱" required>
    <input type="text" name="picture_id" placeholder="圖片ID" required>
    <input type="file" name="picturefile" accept="image/*" required>
    <input type="text" name="class" placeholder="分類">
    <button type="submit">上傳</button>
</form>

3. 上傳處理 (upload.php)

 $maxSize) {
    die('文件過大');
}

// 生成唯一文件名防衝突
$ext = pathinfo($_FILES['picturefile']['name'], PATHINFO_EXTENSION);
$newName = uniqid('img_') . '.' . $ext;
$destPath = $uploadDir . $newName;

if (move_uploaded_file($_FILES['picturefile']['tmp_name'], $destPath)) {
    // 存入數據庫
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
    $stmt = $pdo->prepare('INSERT INTO pictures (name, picture_id, picture_name, picture_path, class) VALUES (?, ?, ?, ?, ?)');
    $stmt->execute([
        $_POST['name'],
        $_POST['picture_id'],
        $newName,
        'uploads/' . $newName,  // 存相對路徑
        $_POST['class'] ?? ''
    ]);
    echo '上傳成功!查看列表';
} else {
    echo '文件移動失敗';
}

4. 列表展示 (list.php)

query('SELECT * FROM pictures ORDER BY save_time DESC');
$pictures = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<table border="1" cellpadding="5">
    <tr><th>ID</th><th>名稱</th><th>圖片ID</th><th>分類</th><th>上傳時間</th><th>操作</th></tr>
    <?php foreach ($pictures as $pic): ?>
    <tr>
        <td><?= $pic['id'] ?></td>
        <td><?= htmlspecialchars($pic['name']) ?></td>
        <td><?= htmlspecialchars($pic['picture_id']) ?></td>
        <td><?= htmlspecialchars($pic['class']) ?></td>
        <td><?= $pic['save_time'] ?></td>
        <td>
            <a href="<?= $pic['picture_path'] ?>" target="_blank">查看圖片</a>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

安全加固建議

  • 文件類型二次驗證:使用 getimagesize() 或 finfo_file() 檢測真實 MIME 類型
  • 文件名安全:不使用用戶原始文件名,採用 uniqid() + 隨機字符串
  • 存儲目錄隔離:上傳目錄設置為不可執行(Nginx/Apache 配置 php_flag engine off)
  • SQL 注入防護:全程使用預處理語句
  • 大小限制:同時設置 PHP upload_max_filesize、post_max_size 及代碼邏輯雙重限制

參考資源

完整示例代碼可參考:PHP 圖片上傳系統教程

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