当前位置:首页 > PHP

php 实现商城图片

2026-02-15 22:34:34PHP

PHP 实现商城图片功能

图片上传处理

使用PHP处理文件上传需要配置表单的enctypemultipart/form-data。通过$_FILES全局数组获取上传的文件信息,检查文件类型和大小,确保安全。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $targetDir = "uploads/";
    $targetFile = $targetDir . basename($_FILES["image"]["name"]);
    $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

    $check = getimagesize($_FILES["image"]["tmp_name"]);
    if ($check === false) {
        echo "文件不是图片。";
        exit;
    }

    if ($_FILES["image"]["size"] > 500000) {
        echo "文件太大。";
        exit;
    }

    $allowedTypes = ["jpg", "png", "jpeg", "gif"];
    if (!in_array($imageFileType, $allowedTypes)) {
        echo "只允许上传 JPG, JPEG, PNG, GIF 文件。";
        exit;
    }

    if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
        echo "文件上传成功。";
    } else {
        echo "上传失败。";
    }
}

图片存储与数据库记录

将上传的图片路径存入数据库,便于后续管理和展示。使用预处理语句防止SQL注入。

$pdo = new PDO("mysql:host=localhost;dbname=shop", "username", "password");
$stmt = $pdo->prepare("INSERT INTO product_images (product_id, image_path) VALUES (:product_id, :image_path)");
$stmt->bindParam(':product_id', $productId);
$stmt->bindParam(':image_path', $targetFile);
$stmt->execute();

图片展示

从数据库读取图片路径并展示在商品页面上。确保路径正确,避免直接暴露服务器文件系统。

php 实现商城图片

$stmt = $pdo->prepare("SELECT image_path FROM product_images WHERE product_id = :product_id");
$stmt->bindParam(':product_id', $productId);
$stmt->execute();
$images = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($images as $image) {
    echo '<img src="' . htmlspecialchars($image['image_path']) . '" alt="商品图片">';
}

图片压缩与优化

使用GD库或ImageMagick对上传的图片进行压缩和优化,减少存储空间和加载时间。

function compressImage($source, $destination, $quality) {
    $info = getimagesize($source);
    if ($info['mime'] == 'image/jpeg') {
        $image = imagecreatefromjpeg($source);
    } elseif ($info['mime'] == 'image/png') {
        $image = imagecreatefrompng($source);
    }
    imagejpeg($image, $destination, $quality);
    imagedestroy($image);
}

compressImage($targetFile, $targetFile, 75);

图片水印添加

为商品图片添加水印,防止盗用。使用GD库在图片上叠加文字或图片水印。

php 实现商城图片

function addWatermark($imagePath, $watermarkText) {
    $image = imagecreatefromjpeg($imagePath);
    $color = imagecolorallocate($image, 255, 255, 255);
    imagettftext($image, 20, 0, 10, 30, $color, "arial.ttf", $watermarkText);
    imagejpeg($image, $imagePath);
    imagedestroy($image);
}

addWatermark($targetFile, "商城名称");

图片缩略图生成

为商品列表生成缩略图,提升页面加载速度。使用GD库调整图片尺寸。

function createThumbnail($source, $destination, $width, $height) {
    $info = getimagesize($source);
    if ($info['mime'] == 'image/jpeg') {
        $image = imagecreatefromjpeg($source);
    } elseif ($info['mime'] == 'image/png') {
        $image = imagecreatefrompng($source);
    }
    $thumbnail = imagecreatetruecolor($width, $height);
    imagecopyresized($thumbnail, $image, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
    imagejpeg($thumbnail, $destination);
    imagedestroy($image);
    imagedestroy($thumbnail);
}

createThumbnail($targetFile, "uploads/thumbnail_" . basename($targetFile), 150, 150);

图片删除功能

提供删除图片的功能,同时从数据库和文件系统中移除相关记录。

function deleteImage($imageId) {
    $pdo = new PDO("mysql:host=localhost;dbname=shop", "username", "password");
    $stmt = $pdo->prepare("SELECT image_path FROM product_images WHERE id = :id");
    $stmt->bindParam(':id', $imageId);
    $stmt->execute();
    $image = $stmt->fetch(PDO::FETCH_ASSOC);

    if (unlink($image['image_path'])) {
        $stmt = $pdo->prepare("DELETE FROM product_images WHERE id = :id");
        $stmt->bindParam(':id', $imageId);
        $stmt->execute();
        echo "图片删除成功。";
    } else {
        echo "删除失败。";
    }
}

图片批量处理

对于大量图片上传或处理,使用循环和批量操作提高效率。

foreach ($_FILES['images']['tmp_name'] as $key => $tmpName) {
    $targetFile = $targetDir . basename($_FILES['images']['name'][$key]);
    if (move_uploaded_file($tmpName, $targetFile)) {
        $stmt = $pdo->prepare("INSERT INTO product_images (product_id, image_path) VALUES (:product_id, :image_path)");
        $stmt->bindParam(':product_id', $productId);
        $stmt->bindParam(':image_path', $targetFile);
        $stmt->execute();
    }
}

标签: 商城图片
分享给朋友:

相关文章

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片。…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

vue实现图片拼接

vue实现图片拼接

Vue 实现图片拼接的方法 使用 Canvas 进行图片拼接 Canvas 提供了强大的绘图能力,可以用于实现图片拼接功能。通过创建一个 Canvas 元素,将多张图片绘制到 Canvas 上,最终导…

vue实现图片压缩

vue实现图片压缩

使用 canvas 实现图片压缩 在 Vue 项目中可以通过 canvas 的 drawImage 和 toDataURL 方法实现图片压缩。创建一个方法处理图片文件,将其绘制到 canvas 并输出…