PHP+MySQL做个放图片的二维码自己用(代码完整直接用)

以下是使用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的代码,可以直接复制使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值