说明
在页面中可以上传整个软件包。上传后自动解压zip文件到uploads目录。
接口
通过访问 链接+upload.php?show_files=true 接口
得到每个文件的更新时间,版本号,MD5等信息数据,可根据每个插件选择部分自动更新。
部分代码
♾️ html 代码: <?php
$configFilePath = 'config/config.php';// 配置文件路径
$configArray = require_once($configFilePath);// 读取配置文件内容为数组
$uploadsDir = 'uploads';// 上传文件保存目录
$maxFileSize = 50 * 1024 * 1024;// 安全优化:限制上传文件大小为50MB(可根据实际需求调整)
if (!is_dir($uploadsDir)) {mkdir($uploadsDir);}// 检查上传目录是否存在,不存在则创建
// 定义函数用于返回JSON数据并设置Content-Type头部信息
function sendJsonResponse($data) {header('Content-Type: application/json');echo json_encode($data);}
// 根据请求方法处理不同的操作
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理文件上传相关操作
if (isset($_FILES['updateFile'])) {
$updateFile = $_FILES['updateFile'];
// 安全优化:检查上传文件大小是否超过限制
if ($updateFile['size'] > $maxFileSize) {
$response = [
'success' => false,
'message' => '上传文件过大,请选择不超过50MB的文件。'
];
sendJsonResponse($response);
exit;
}
// 检查上传密码是否正确
$passwordEntered = $_POST['password']?? '';
if (!password_verify($passwordEntered, $configArray['password'])) {
$response = [
'success' => false,
'message' => '密码错误,请重新输入。'
];
sendJsonResponse($response);
exit;
}
// 处理上传的文件
$versionNumber = $_POST['versionNumber']?? '';
$updateContent = $_POST['updateContent']?? '';
// 更新配置文件中的版本号和更新内容
$configArray['version_number'] = $versionNumber;
$configArray['update_content'] = $updateContent;
// 解压上传的ZIP文件
$zip = new ZipArchive();
if ($zip->open($updateFile['tmp_name']) === true) {
$zip->extractTo($uploadsDir);
$zip->close();
$response = [
'success' => true,
'message' => '文件上传并解压成功。'
];
sendJsonResponse($response);
} else {
$response = [
'success' => false,
'message' => '文件上传失败,请稍后重试。'
];
sendJsonResponse($response);
}
} elseif (isset($_POST['old_password']) && isset($_POST['new_password']) && isset($_POST['confirm_new_password'])) {
// 处理密码修改相关操作
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
$confirmNewPassword = $_POST['confirm_new_password'];
// 验证旧密码是否正确
if (!password_verify($oldPassword, $configArray['password'])) {
$response = [
'success' => false,
'message' => '旧密码错误,请重新输入。'
];
sendJsonResponse($response);
exit;
}
// 检查新密码和确认新_password 是否一致
if ($newPassword!== $confirmNewPassword) {
$response = [
'success' => false,
'message' => '新密码和确认新密码不一致,请重新输入。'
];
sendJsonResponse($response);
exit;
}
// 生成新密码的哈希值
$hashedNewPassword = password_hash($newPassword, PASSWORD_DEFAULT);
// 修改配置文件中的密码
$configArray['password'] = $hashedNewPassword;
$response = [
'success' => true,
'message' => '密码修改成功。'
];
sendJsonResponse($response);
}
} elseif (isset($_GET['show_files']) && $_GET['show_files'] === 'true') {
// 列出解压后的文件信息
$filesInfo = [];
$versionNumber = $configArray['version_number'];
$updateContent = $configArray['update_content'];
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($uploadsDir));
foreach ($iterator as $file) {
if ($file->isFile()) {
$fileInfo = [
'file_path' => $file->getPathname(),
'file_md5' => md5_file($file->getPathname()),
'file_modified_time' => $file->getMTime()
];
$filesInfo[] = $fileInfo;
}
}
$response = [
'files' => $filesInfo,
'version_number' => $versionNumber,
'update_content' => $updateContent,
'beijing_time' => date('Y-m-d H:i:s', time() + 8 * 3600)
];
sendJsonResponse($response);
}
$newConfigContent = "<?php\nreturn ". var_export($configArray, true). ";\n?>";
file_put_contents($configFilePath, $newConfigContent);
?>
代码简单明了,都带注释,新手应该也能整明白。