以下是使用PHP和MySQL实现的图片上传及生成访问二维码的完整代码:
<?php
// config.php - 数据库配置
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'password');
define('DB_NAME', 'image_qrcode');
define('UPLOAD_DIR', 'uploads/');
define('QRCODE_DIR', 'qrcodes/');
// 创建数据库连接
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 创建必要目录
if (!file_exists(UPLOAD_DIR)) mkdir(UPLOAD_DIR, 0777, true);
if (!file_exists(QRCODE_DIR)) mkdir(QRCODE_DIR, 0777, true);
// 初始化数据库表
$sql = "CREATE TABLE IF NOT EXISTS images (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
mime_type VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
$conn->query($sql);
?>
<?php
// index.php - 上传表单和展示二维码
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理文件上传
if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
$file = $_FILES['image'];
// 验证文件类型
$allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowed_types)) {
die("只允许上传JPEG、PNG或GIF图片");
}
// 生成唯一文件名
$filename = uniqid() . '_' . basename($file['name']);
$target_path = UPLOAD_DIR . $filename;
if (move_uploaded_file($file['tmp_name'], $target_path)) {
// 插入数据库
$stmt = $conn->prepare("INSERT INTO images (filename, mime_type) VALUES (?, ?)");
$stmt->bind_param("ss", $filename, $file['type']);
$stmt->execute();
$image_id = $stmt->insert_id;
$stmt->close();
// 生成二维码
require_once 'phpqrcode/qrlib.php';
$qrcode_path = QRCODE_DIR . $image_id . '.png';
$view_url = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI'])."/view.php?id=$image_id";
QRcode::png($view_url, $qrcode_path, QR_ECLEVEL_L, 10);
echo "<h2>上传成功!</h2>";
echo "<img src='$qrcode_path'><br>";
echo "<a href='$qrcode_path' download>下载二维码</a>";
}
}
} else {
// 显示上传表单
echo <<<FORM
<h1>图片上传</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" required>
<button type="submit">上传并生成二维码</button>
</form>
FORM;
}
?>
<?php
// view.php - 显示图片
include 'config.php';
if (isset($_GET['id'])) {
$id = intval($_GET['id']);
$stmt = $conn->prepare("SELECT filename, mime_type FROM images WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($filename, $mime_type);
if ($stmt->fetch()) {
header("Content-Type: $mime_type");
readfile(UPLOAD_DIR . $filename);
exit();
}
}
header("HTTP/1.1 404 Not Found");
echo "图片不存在";
如果有其他疑问,可以留言,将帮助大家解决。如果觉得编程麻烦,您可以借助八木屋图片二维码生成器来生成制作。不过想要自己用长期免费永久有效,还是得学会写代码,上述PHP+MySQL的代码,可以直接复制使用。