<?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>