120) { $ext = pathinfo($name, PATHINFO_EXTENSION); $base = pathinfo($name, PATHINFO_FILENAME); $base = substr($base, 0, 100); $name = $base . ($ext ? ('.' . $ext) : ''); } return $name; } function html($s) { return htmlspecialchars($s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); } $allowed = ['jpg','jpeg','png','gif','webp']; $maxSize = 10 * 1024 * 1024; // 10MB $title = isset($_POST['title']) ? trim($_POST['title']) : ''; if (!isset($_FILES['picture'])) { echo '

未接收到文件。

返回图片投稿页

'; exit; } // 上传错误处理 if (!empty($_FILES['picture']['error'])) { $err = (int)$_FILES['picture']['error']; if ($err === UPLOAD_ERR_INI_SIZE || $err === UPLOAD_ERR_FORM_SIZE) { echo '

上传失败:文件大小超过服务器限制。请确保图片不超过 10MB。

返回图片投稿页

'; exit; } echo '

上传失败,错误码:' . $err . '。

返回图片投稿页

'; exit; } if (!is_uploaded_file($_FILES['picture']['tmp_name'])) { echo '

文件上传失败。

返回图片投稿页

'; exit; } $file = $_FILES['picture']; $origName = $file['name'] ?? 'uploaded_image'; $safeName = sanitizeFileName($origName); $ext = strtolower(pathinfo($safeName, PATHINFO_EXTENSION)); if (!in_array($ext, $allowed)) { echo '

仅支持文件类型:jpg / jpeg / png / gif / webp。

返回图片投稿页

'; exit; } // 大小限制 10MB $size = (int)($_FILES['picture']['size'] ?? 0); if ($size > $maxSize) { echo '

图片大小超过 10MB 限制,投稿失败。

返回图片投稿页

'; exit; } $unique = date('Ymd_His') . '_' . mt_rand(1000,9999) . '.' . $ext; $target = $pendingDir . '/' . $unique; if (!move_uploaded_file($file['tmp_name'], $target)) { echo '

保存文件失败,请稍后重试。

返回图片投稿页

'; exit; } $meta = [ 'original_name' => $origName, 'saved_name' => basename($target), 'title' => $title, 'uploaded_at' => date('c'), 'size' => $file['size'] ?? 0, 'type' => $file['type'] ?? '', ]; @file_put_contents($pendingDir . '/' . basename($target) . '.json', json_encode($meta, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); echo '
'; echo '

投稿成功!图片已进入待审核队列。

'; if (!empty($title)) { echo '

标题:' . html($title) . '

'; } echo '

管理员可前往 图片审核页面 进行审批。

'; echo '

继续投稿返回首页

'; echo '
'; ?>