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

PHP 圖片上傳壓縮入庫三文件實現(mysqli 預處理)

     編輯:PHP 綜合知識

文件結構

  • connect.php — 資料庫連線
  • upload_img.php — 上傳、壓縮、返回路徑
  • test_upload.php — 接收路徑、預處理寫入資料庫

1. connect.php

set_charset('utf8mb4');
if ($db->connect_errno) {
    die('Connect failed: '.$db->connect_error);
}

2. upload_img.php

3,'msg'=>'類型錯誤']));
}

$ext = fileext($_FILES['filename']['name']);
do { $name = randname().'.'.$ext; } while (file_exists($uploaddir.$name));
$uploadfile = $uploaddir.$name;
$uploadfile_resize = $uploaddir_resize.$name;

if (move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile)) {
    // 壓縮邏輯
    $im = null;
    switch ($_FILES['filename']['type']) {
        case 'image/jpeg': case 'image/pjpeg': $im = imagecreatefromjpeg($uploadfile); break;
        case 'image/png': case 'image/x-png': $im = imagecreatefrompng($uploadfile); break;
        case 'image/gif': $im = imagecreatefromgif($uploadfile); break;
        default: $im = imagecreatefromjpeg($uploadfile);
    }
    if ($im) {
        $w = imagesx($im); $h = imagesy($im);
        $ratio = 0.5; // 固定縮半
        $nw = (int)($w*$ratio); $nh = (int)($h*$ratio);
        $thumb = imagecreatetruecolor($nw, $nh);
        imagecopyresampled($thumb, $im, 0,0,0,0, $nw,$nh, $w,$h);
        imagejpeg($thumb, $uploadfile_resize, 90);
        imagedestroy($thumb); imagedestroy($im);
    }
    die(json_encode(['code'=>0,'original'=>$uploadfile,'thumb'=>$uploadfile_resize]));
}
die(json_encode(['code'=>1,'msg'=>'上傳失敗']));

3. test_upload.php

prepare('INSERT INTO img (real_img, small_img) VALUES (?, ?)');
$stmt->bind_param('ss', $real_img, $small_img);
$stmt->execute();
echo $stmt->affected_rows ? 'ok' : 'fail';

資料表

CREATE TABLE `img` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `real_img` varchar(255) NOT NULL,
  `small_img` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

改進建議(生產級)

  1. 分離關注點:上傳類只返回路徑,控制器負責入庫
  2. 預處理防注入:已使用 bind_param
  3. 異常處理:try-catch 包裹,回滾事務
  4. 配置外置:路徑、壓縮比、允許類型移至配置文件
  5. 異步處理:大圖壓縮放入隊列,立即返回原圖 URL

總結

三文件最小可行實現:connect.php 連線 → upload_img.php 上傳壓縮 → test_upload.php 預處理入庫。核心安全點:mysqli 預處理綁定參數、文件類型白名單、隨機文件名防覆蓋。實際專案請按 MVC 分層重構。

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