文章详情

返回首页

servoo图床-php

分享文章 作者: Ws01 创建时间: 2025-11-24 📝 字数: 11,061 字 👁️ 阅读: 11 次
<?php $imgRoot = './img9527abc'; // 务必修改此处!!图像存储根路径 if (!is_dir($imgRoot)) { if (is_readable($imgRoot)) { trigger_error("{$imgRoot} 不是有效的目录", E_USER_NOTICE); } else { mkdir($imgRoot, 0777, true); } } // 获取真实IP地址的函数(考虑使用CDN的情况) function getRealIp() { if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) { // Cloudflare CDN return $_SERVER['HTTP_CF_CONNECTING_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // 通过其他CDN时 // 获取最后一个有效IP地址(避免多个IP时取第一个不可靠的) $ipList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); return trim(end($ipList)); } else { return $_SERVER['REMOTE_ADDR']; // 默认获取直接连接的IP } } // 处理图像上传 $uploadResults = []; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['images'])) { foreach ($_FILES['images']['tmp_name'] as $key => $tmpName) { $file = $_FILES['images']; if ($file['error'][$key] === UPLOAD_ERR_OK) { $imageData = file_get_contents($tmpName); $imageName = basename($file['name'][$key]); $md5Hash = md5($imageData); $uploadTime = time(); $uploaderIP = getRealIp(); // 将图像信息存储到SQLite数据库中 $dbPath = "$imgRoot/$md5Hash.db"; $db = new SQLite3($dbPath); // 创建表格(如果表不存在) $db->exec("CREATE TABLE IF NOT EXISTS images ( md5 TEXT PRIMARY KEY, name TEXT, upload_time INTEGER, uploader_ip TEXT, image_data BLOB )"); // 检查是否已存在相同的md5 $stmt = $db->prepare("SELECT md5 FROM images WHERE md5 = :md5"); $stmt->bindValue(':md5', $md5Hash, SQLITE3_TEXT); $result = $stmt->execute(); if (!$result->fetchArray()) { // 使用二进制数据和压缩后存储 $compressedImageData = gzcompress($imageData); // 插入图像数据 $stmt = $db->prepare("INSERT INTO images (md5, name, upload_time, uploader_ip, image_data) VALUES (:md5, :name, :upload_time, :uploader_ip, :image_data)"); $stmt->bindValue(':md5', $md5Hash, SQLITE3_TEXT); $stmt->bindValue(':name', $imageName, SQLITE3_TEXT); $stmt->bindValue(':upload_time', $uploadTime, SQLITE3_INTEGER); $stmt->bindValue(':uploader_ip', $uploaderIP, SQLITE3_TEXT); $stmt->bindValue(':image_data', $compressedImageData, SQLITE3_BLOB); $stmt->execute(); $uploadResults[] = [ 'name' => $imageName, 'md5' => $md5Hash, 'status' => 'success' ]; } else { $uploadResults[] = [ 'name' => $imageName, 'md5' => $md5Hash, 'status' => 'duplicate' ]; } $db->close(); } else { $uploadResults[] = [ 'name' => $file['name'][$key], 'md5' => null, 'status' => 'error' ]; } } } // 处理图像显示 if (isset($_GET['md5'])) { $md5 = $_GET['md5']; $dbPath = "$imgRoot/$md5.db"; if (file_exists($dbPath)) { $db = new SQLite3($dbPath); $stmt = $db->prepare("SELECT name, image_data FROM images WHERE md5 = :md5"); $stmt->bindValue(':md5', $md5, SQLITE3_TEXT); $result = $stmt->execute(); $row = $result->fetchArray(SQLITE3_ASSOC); if ($row) { header("Content-Disposition: inline; filename=\"" . $row['name'] . "\""); header("Content-Type: image/" . pathinfo($row['name'], PATHINFO_EXTENSION)); echo gzuncompress($row['image_data']); exit; } $db->close(); } else { echo "图像未找到。"; exit; } } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="icon" href="./img9527abc/logo-01.png" /> <title>图片上传</title> <style> body { font-family: Arial, sans-serif; background-image: url('https://img.9527.nyc.mn'); background-size: cover; background-position: center; background-repeat: no-repeat; opacity: 0.8; /* 调整透明度 */ margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; flex-direction: column; } .footer { font-size:15px; color:#ffffff; margin:15px auto; } .container { background-color: white; padding: 20px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); width: 100%; max-width: 500px; text-align: center; } h1 { margin-bottom: 20px; } input[type="file"] { display: none; } .custom-file-upload { border: 1px solid #ccc; display: inline-block; padding: 8px 12px; cursor: pointer; background-color: #007bff; color: white; border-radius: 4px; } button { background-color: #28a745; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; } button:hover { background-color: #218838; } .message { margin-top: 20px; color: #333; } .preview-container img { width: 100px; height: 100px; object-fit: cover; margin: 10px; border-radius: 4px; } .result-container { margin-top: 20px; } .result-container a { display: block; margin-bottom: 5px; } .copy-success { font-size: 12px; color: green; margin-top: 5px; } </style> </head> <body> <div class="container"> <h1>上传图片</h1> <form id="uploadForm" action="index.php" method="POST" enctype="multipart/form-data"> <label for="images" class="custom-file-upload">选择图片</label> <input type="file" name="images[]" id="images" multiple required> <div class="preview-container" id="previewContainer"></div> <br><br> <button type="submit">上传</button> </form> <div class="message"> <?php if ($uploadResults): ?> <?php $successCount = 0; ?> <?php foreach ($uploadResults as $result): ?> <?php if ($result['status'] === 'success') $successCount++; ?> <?php endforeach; ?> <?= $successCount . ' / ' . count($uploadResults) ?> 张图片上传成功! <?php endif; ?> </div> <div class="result-container"> <?php if ($uploadResults): ?> <?php foreach ($uploadResults as $result): ?> <?php if ($result['status'] === 'success'): ?> <div> <a href="?md5=<?= $result['md5'] ?>" target="_blank" class="image-url"><?= $result['name'] ?></a> <button class="copy-btn" data-url="?md5=<?= $result['md5'] ?>">复制链接</button> <span class="copy-success"></span> </div> <?php elseif ($result['status'] === 'duplicate'): ?> <div><?= $result['name'] ?> 已存在,点击查看:<a href="?md5=<?= $result['md5'] ?>" target="_blank"><?= $result['name'] ?></a></div> <?php else: ?> <div><?= $result['name'] ?> 上传失败</div> <?php endif; ?> <?php endforeach; ?> <?php endif; ?> </div> </div> <br /> <br /> <!-- body https://img1.199881.xyz/file/cfa3e1a8179c6feb6ae2c.jpg和https://i0.img2ipfs.com/ipfs/QmPQX8EZRjXcW5kBmGpAF4XkLHJbCjzsd9zaiwhKAYJgsT --> <div class="footer"> <a href="https://img.199881.xyz/" target="_blank">TG图床</a> | <!-- <a href="https://img.9527.us.kg/" target="_blank">serv00图床</a> | --> <a href="https://ngohome.eu.org/" target="_blank">ngohome图床</a> | <a href="https://freeimg.netlib.re/" target="_blank">nfreeimg图床</a> | <!-- <a href="https://freemjj.nyc.mn/" target="_blank">5G图床2</a> | --> <!-- <a href="https://ipfs.9527.us.kg/" target="_blank">ipfs图床</a> --> <br /> <!-- 开站时间开始 --> <span id="timeDate">载入天数...</span> <script language="javascript"> var now = new Date(); function createtime(){ var grt= new Date("01/05/2025 00:00:00");/*---这里是网站的启用时间--*/ now.setTime(now.getTime()+250); days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days); document.getElementById("timeDate").innerHTML = "稳定运行"+dnum+"天"; } setInterval("createtime()",250); </script> <span <p> | 本页总访问量 <span id="busuanzi_site_pv"></span> 次 | @ws01</p></span> <script defer src="https://bsz.211119.xyz/js"></script> <!-- 开站时间结束 --> <script> const previewContainer = document.getElementById('previewContainer'); const fileInput = document.getElementById('images'); fileInput.addEventListener('change', () => { previewContainer.innerHTML = ''; Array.from(fileInput.files).forEach(file => { const reader = new FileReader(); reader.onload = function (e) { const img = document.createElement('img'); img.src = e.target.result; previewContainer.appendChild(img); }; reader.readAsDataURL(file); }); }); document.querySelectorAll('.copy-btn').forEach(button => { button.addEventListener('click', function () { const url = this.getAttribute('data-url'); const textarea = document.createElement('textarea'); textarea.value = window.location.href.split('?')[0] + url; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); this.nextElementSibling.textContent = '复制成功!'; }); }); </script> </body> </html>