当前位置:首页 > PHP

php实现插入图片

2026-02-15 21:20:08PHP

插入图片到数据库

使用PHP将图片插入数据库通常涉及将图片转换为二进制数据(BLOB)存储。以下是一个完整示例:

<?php
// 数据库连接配置
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 获取上传的图片文件
    $image = file_get_contents($_FILES['image']['tmp_name']);

    // 准备SQL语句
    $stmt = $conn->prepare("INSERT INTO images (image_data, image_name) VALUES (?, ?)");

    // 绑定参数并执行
    $stmt->bindParam(1, $image, PDO::PARAM_LOB);
    $stmt->bindParam(2, $_FILES['image']['name']);
    $stmt->execute();

    echo "图片上传成功";
} catch(PDOException $e) {
    echo "错误: " . $e->getMessage();
}
$conn = null;
?>

存储图片到文件系统

更常见的做法是将图片存储在服务器文件系统中,数据库中只保存路径:

<?php
// 上传目录
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);

// 检查是否为真实图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if($check === false) {
    die("文件不是图片");
}

// 检查文件大小(限制为5MB)
if ($_FILES["image"]["size"] > 5000000) {
    die("文件太大");
}

// 允许特定文件格式
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
    die("只允许JPG, JPEG, PNG格式");
}

// 尝试上传文件
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
    // 将路径存入数据库
    $stmt = $conn->prepare("INSERT INTO images (image_path) VALUES (?)");
    $stmt->execute([$target_file]);
    echo "图片上传成功";
} else {
    echo "上传失败";
}
?>

显示存储的图片

从数据库显示BLOB图片:

php实现插入图片

<?php
$stmt = $conn->prepare("SELECT image_data FROM images WHERE id = ?");
$stmt->execute([$image_id]);
$image = $stmt->fetch(PDO::FETCH_ASSOC);

header("Content-Type: image/jpeg");
echo $image['image_data'];
?>

显示文件系统中的图片:

<?php
$stmt = $conn->prepare("SELECT image_path FROM images WHERE id = ?");
$stmt->execute([$image_id]);
$image = $stmt->fetch(PDO::FETCH_ASSOC);

echo '<img src="'.$image['image_path'].'" alt="存储的图片">';
?>

安全注意事项

验证文件类型时应使用服务器端检查,而非仅依赖客户端检查:

php实现插入图片

$allowed_types = ['image/jpeg', 'image/png'];
$detected_type = mime_content_type($_FILES['image']['tmp_name']);

if(!in_array($detected_type, $allowed_types)) {
    die("不允许的文件类型");
}

为上传文件生成唯一文件名,避免覆盖和安全问题:

$new_filename = uniqid().'.'.$imageFileType;
$target_file = $target_dir . $new_filename;

设置上传目录权限为不可执行:

chmod -R 755 uploads/

标签: 插入图片php
分享给朋友:

相关文章

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (f…

php 实现多继承

php 实现多继承

在PHP中,原生不支持多继承,但可以通过以下几种方法模拟实现类似多继承的功能: 使用 trait Trait是PHP 5.4引入的特性,允许在类中复用代码片段,可以视为一种轻量级的继承机制。一个类可…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

php实现多进程

php实现多进程

PHP 实现多进程的方法 PHP 本身是单线程的脚本语言,但可以通过扩展或系统调用来实现多进程操作。以下是几种常见的实现方式: 使用 pcntl 扩展 pcntl(Process Control)是…