引言

一、环境准备

在开始编写代码之前,我们需要确保以下环境已准备就绪:

  1. PHP环境:安装PHP解释器和相应的扩展模块,如php_mbstring.dll(用于处理多字节字符串)和php_gd2.dll(用于生成图像)。
  2. 数据库:安装MySQL数据库,用于存储图片信息。
  3. 服务器:可以使用本地服务器或云服务器,如XAMPP、WAMP、MAMP等。

二、前端表单设计

<!DOCTYPE html>
<html>
<head>
    <title>图片上传</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="image">选择图片:</label>
        <input type="file" name="image" id="image" required>
        <input type="submit" value="上传">
    </form>
</body>
</html>

三、后端PHP代码编写

<?php
// upload.php

// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
    // 获取上传文件的临时路径和文件名
    $tempPath = $_FILES['image']['tmp_name'];
    $filename = $_FILES['image']['name'];

    // 设置上传目录
    $uploadDir = 'uploads/';

    // 检查上传目录是否存在,如果不存在则创建
    if (!file_exists($uploadDir)) {
        mkdir($uploadDir, 0777, true);
    }

    // 生成新的文件名
    $newFilename = uniqid() . '_' . $filename;

    // 移动上传的文件到指定目录
    if (move_uploaded_file($tempPath, $uploadDir . $newFilename)) {
        echo "图片上传成功!<br>";
        echo "上传的图片地址:{$uploadDir}{$newFilename}";
    } else {
        echo "图片上传失败!";
    }
} else {
    echo "没有文件被上传。";
}
?>

在这个PHP脚本中,我们首先检查是否有文件被上传。然后,我们获取上传文件的临时路径和文件名,并设置上传目录。接下来,我们检查上传目录是否存在,如果不存在则创建它。然后,我们生成一个新的文件名,并将上传的文件移动到指定目录。

四、图片存储与展示

<?php
// db.php

// 数据库连接信息
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
$dbName = 'image_upload';

// 创建数据库连接
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

// 检查数据库连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 上传图片到数据库
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
    $tempPath = $_FILES['image']['tmp_name'];
    $filename = $_FILES['image']['name'];
    $uploadDir = 'uploads/';

    // 生成新的文件名
    $newFilename = uniqid() . '_' . $filename;

    // 移动上传的文件到指定目录
    if (move_uploaded_file($tempPath, $uploadDir . $newFilename)) {
        // 插入图片信息到数据库
        $stmt = $conn->prepare("INSERT INTO images (name, path) VALUES (?, ?)");
        $stmt->bind_param("ss", $filename, $uploadDir . $newFilename);
        $stmt->execute();
        $stmt->close();
        $conn->close();

        echo "图片上传并存储成功!";
    } else {
        echo "图片上传失败!";
    }
}
?>

五、图片展示

<?php
// display.php

// 数据库连接信息
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
$dbName = 'image_upload';

// 创建数据库连接
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

// 检查数据库连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 查询数据库中的图片信息
$stmt = $conn->prepare("SELECT name, path FROM images");
$stmt->execute();
$result = $stmt->get_result();

echo "<h1>上传的图片</h1>";
echo "<div class='image-container'>";
while ($row = $result->fetch_assoc()) {
    echo "<img src='{$row['path']}' alt='{$row['name']}' width='200' height='200'>";
}
echo "</div>";
$stmt->close();
$conn->close();
?>

总结