引言
一、环境准备
在开始编写代码之前,我们需要确保以下环境已准备就绪:
- PHP环境:安装PHP解释器和相应的扩展模块,如
php_mbstring.dll(用于处理多字节字符串)和php_gd2.dll(用于生成图像)。 - 数据库:安装MySQL数据库,用于存储图片信息。
- 服务器:可以使用本地服务器或云服务器,如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();
?>