diff --git a/README.md b/README.md index 04904244..a912bdd3 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,20 @@ PanDownload 网页复刻版,PHP 语言版
本项目仅供大家学习参考,严禁商业用途 -### 实现原理 +## 🔎实现原理 通过curl获取网盘文件信息,处理后显示在网页中。通过api接口以及SVIP账号的Cookie(BDUSS)获取高速下载链接。
本质就是用会员账号获取下载地址并发送给访客。 -在使用时请保留导航栏的 Made by Yuan_Tuo ,感谢! +📢在使用时请保留导航栏的 Made by Yuan_Tuo ,感谢! -欢迎各位转发本项目到各大论坛,但请一定要标注原地址! +📢欢迎各位转发本项目到各大论坛,但请一定要标注原地址! ![speed.gif](https://i.loli.net/2020/10/01/2mEqkClnPev8ORd.gif) -## Donate +## 💴Donate [捐赠作者](https://imwcr.cn/?donate) -## Blacklists +## 🚧Blacklists - https://pan.xiaoshuyun.cn/ 1.4.3版本 无密码 - https://pan.qiafan.vip/ 1.4.5版本 无密码 @@ -39,7 +39,7 @@ PanDownload 网页复刻版,PHP 语言版
版权信息可添加**Github项目地址**或**我个人主页地址**,内容可自定,但访客**必须可见**。
**那些把文字颜色和背景改成一样的站长,有意思吗?** -## Tips +## 📌Tips - 使用了 `Curl`,使用前请确认安装了Curl及其PHP插件 - 使用了 `SESSION`,注意 **PHP 访问系统文件(夹)权限** 问题 - 仅支持 **PHP 7 和 7+**! @@ -56,34 +56,43 @@ PanDownload 网页复刻版,PHP 语言版
- `Google Chrome 88+` [点此访问 Chrome 官网](https://www.google.cn/chrome/) - `Firefox 85+` [点此访问 Firefox 官网](https://www.firefox.com.cn/) -# Setting +# 🔧Setting 首先Clone项目或进入[Releases](https://github.com/yuantuo666/baiduwp-php/releases)下载项目文件。
然后访问 `install.php` 文件并填写相关信息。
如果使用数据库,则需要先点击 `检查数据库连接` 连接数据库,保证账号密码正确。
最后点击提交即可。 -## Demo +## 💻Demo [暂不开放](http://imwcr.cn/api/bdwp/)
因站长学习紧张加上精力有限,演示站没有时间维护,故暂时关闭。 -## New Changes -- 当前版本:`2.0.0` -- 更新日期:2021-02-11 -- 修改内容 - - ✨增加深色模式 - - 弹窗升级适应深色模式,改 `SweetAlert` 为 `SweetAlert2` - - 优化部分 PHP 和 JavaScript 代码 - - 修复 SQL 文件中初始序号不为 1 的问题 - - ✨新增用户设置页面,可手动设置**系统语言**和**色彩模式** - - 删除不必要的保护密码提醒(从项目启动时留下来的问题) - - 增加新的免登陆接口获取 50MB 以下文件 **(未完成)** - - ✨系统语言增加英语,可自动识别浏览器语言,也可手动切换 - - ✨增加安装程序 - - 丰富错误提示内容 - - 修复一些历史遗留 bug - - 修复一些新发现/新出现的 bug +## 📦New Changes +- 当前版本:`2.1.0` +- 更新日期:2021-02-17 + +- 修改内容: + - 💥新增功能 + - 安装程序 `install.php` 自动检测旧版本配置文件 `config.php` 是否存在,若存在自动导入旧版本配置 + - 增加选择是否取消下载次数提醒功能 + - ✨安装时支持保留数据库数据 + - ✨后台管理页面支持删除数据 + - ✨增加四种SVIP账号切换模式 + - 增加首页公告自定义功能 + - 💪安全增强 + - 安装程序 `install.php` 自动检测是否安装过,如果安装则需进入管理员页面登录 + - ⚠错误修复 + - 修复部分页面检查密码功能失效问题 + - 修复首页小圆点无颜色错误 + - 修复不支持色彩模式的浏览器无法显示 `Sweetalert2` 弹窗问题 + - 修复解析数据一直为 `2.00GB` 问题 + - 修复管理员密码错误不提示 + - ♻代码优化 + - ✨将 `settings.php` 内部分请求方式改为 `ajax` ,增加加载提示框 + - 优化提示文本(语法、严谨程度等),给一些提示框增加图标 + - 增加部分配置异常的处理程序 + - 优化部分 PHP 和 JavaScript 代码 -## Thanks +## 🔔Thanks - [baiduwp JavaScript 版](https://github.com/TkzcM/baiduwp "GitHub 项目") - [PanDownload 网站](https://pandownload.com/ "PanDownload 网站") - [Bootstrap 深色模式](https://github.com/vinorodrigues/bootstrap-dark "bootstrap-dark 项目") diff --git a/api.php b/api.php index 904110e2..68187d21 100644 --- a/api.php +++ b/api.php @@ -10,6 +10,7 @@ * @link https://space.bilibili.com/88197958 * */ +$programVersion_API = '2.1.0'; session_start(); define('init', true); if (version_compare(PHP_VERSION, '7.0.0', '<')) { @@ -19,14 +20,29 @@ die("HTTP 503 服务不可用!\r\nPHP 版本过低!无法正常运行程序!\r\n请安装 7.0.0 或以上版本的 PHP!\r\n将在五秒内跳转到 PHP 官方下载页面!"); } $method = (!empty($_GET["m"])) ? $_GET["m"] : ""; // 下一步判断是否引用config.php需用到 -if ((!file_exists('functions.php')) or ($method != "CheckMySQLConnect" and !file_exists('functions.php'))) { +if (!file_exists('functions.php')) { http_response_code(503); header('Content-Type: text/plain; charset=utf-8'); header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); die("HTTP 503 服务不可用!\r\n缺少相关文件!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); } // 导入配置和函数 -if ($method != "CheckMySQLConnect") require('config.php'); // 如果是使用检查连接,还没有配置好文件,不能引用 +if ($method != "CheckMySQLConnect") { // 如果是使用检查连接,还没有配置好文件,不能引用 + if (!file_exists('config.php')) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序!"); + } else { + require('config.php'); + if ($programVersion_API !== programVersion) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n配置文件版本异常!\r\n将在五秒内跳转到安装程序!\r\n若重新安装无法解决问题,请重新 Clone 项目并配置!"); + } + } +} require('functions.php'); // 通用响应头 header('Content-Type: text/html; charset=utf-8'); @@ -37,7 +53,187 @@ } else { error_reporting(0); // 关闭错误报告 } +$is_login = (empty($_SESSION["admin_login"])) ? false : $_SESSION["admin_login"]; +if ($method == "ADMINAPI") { + if (!$is_login) { + //没有登录管理员账号 + EchoInfo(-1, array("msg" => "未登录")); + exit; + } else { + connectdb(); + } + $action = (!empty($_GET["act"])) ? $_GET["act"] : ""; + switch ($action) { + case "AnalyseGetTable": + $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; + echo GetAnalyseTablePage($page); + break; + case "SvipGetTable": + $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; + echo GetSvipTablePage($page); + break; + case "singleBDUSS": + // 先处理是否有新增加数据 + $BDUSS = (!empty($_POST["BDUSS"])) ? trim($_POST["BDUSS"]) : ""; + $STOKEN = (!empty($_POST["STOKEN"])) ? $_POST["STOKEN"] : ""; + $name = (!empty($_POST["name"])) ? $_POST["name"] : ""; + if ($BDUSS != "" and strlen($BDUSS) == 192) { + // 开始录入 + $add_time = date("Y-m-d H:i:s"); + $sql = "INSERT INTO `" . $dbtable . "_svip`( `name`, `svip_bduss`, `svip_stoken`, `add_time`, `state`, `is_using`) VALUES ('$name','$BDUSS','$STOKEN','$add_time',1,'')"; + $Result = mysqli_query($conn, $sql); + if ($Result != false) EchoInfo(0, array("msg" => "新增成功", "detail" => "已经成功新增一条会员数据。3s后将刷新该页面。", "refresh" => true)); + else { + $Error = addslashes(mysqli_error($conn)); + EchoInfo(-1, array("msg" => "添加失败", "detail" => $Error)); + } + } else { + EchoInfo(-1, array("msg" => "添加失败", "detail" => "请检查BDUSS是否填写正确")); + } + break; + case "multiBDUSS": + $BDUSS = (!empty($_POST["MULTI_BDUSS"])) ? trim($_POST["MULTI_BDUSS"]) : ""; + $name = (!empty($_POST["name"])) ? $_POST["name"] : ""; + if ($BDUSS != "") { + // 开始录入 + $allsql = ""; + $add_time = date("Y-m-d H:i:s"); + + $AllBduss = explode("\n", $BDUSS); + for ($i = 0; $i < count($AllBduss); $i++) { + $sql = "INSERT INTO `" . $dbtable . "_svip`( `name`, `svip_bduss`, `add_time`, `state`, `is_using`) VALUES ('$name-" . ($i + 1) . "','" . $AllBduss[$i] . "','$add_time',1,'');"; + $allsql .= $sql; + } + + $sccess_result = 0; + if (mysqli_multi_query($conn, $allsql)) { + do { + $sccess_result = $sccess_result + 1; + } while (mysqli_more_results($conn) && mysqli_next_result($conn)); + } + + $affect_row = mysqli_affected_rows($conn); + if ($affect_row == -1) + EchoInfo(-1, array("msg" => "导入失败", "detail" => "错误在" . $sccess_result . "行")); + else EchoInfo(0, array("msg" => "导入成功", "detail" => "成功导入" . $sccess_result . "条数据。3s后将刷新该页面。", "refresh" => true)); + } else EchoInfo(-1, array("msg" => "添加失败", "detail" => "请检查BDUSS是否填写正确")); + break; + case "SvipSettingFirstAccount": + $id = (!empty($_GET["id"])) ? $_GET["id"] : ""; + if ($id == "") { + // 参数错误 + EchoInfo(-1, array("msg" => "传入参数错误")); + } else { + // 开始处理 + // 这里最新的时间表示可用账号,按顺序排序 + $is_using = date("Y-m-d H:i:s"); + $sql = "UPDATE `" . $dbtable . "_svip` SET `is_using`= '$is_using' WHERE `id`=$id"; + $mysql_query = mysqli_query($conn, $sql); + if ($mysql_query != false) { + // 成功 + EchoInfo(0, array("msg" => "ID为 $id 的账号已被设置为首选账号。3s后将刷新该页面。", "refresh" => true)); + } else { + // 失败 + EchoInfo(-1, array("msg" => "修改失败")); + } + } + break; + case "SvipSettingNormalAccount": + $id = (!empty($_GET["id"])) ? $_GET["id"] : ""; + if ($id == "") { + // 参数错误 + EchoInfo(-1, array("msg" => "传入参数错误")); + } else { + // 开始处理 + $sql = "UPDATE `" . $dbtable . "_svip` SET `state`= 1 WHERE `id`=$id"; + $mysql_query = mysqli_query($conn, $sql); + if ($mysql_query != false) { + // 成功 + EchoInfo(0, array("msg" => "ID为 $id 的账号已被设置为正常账号。3s后将刷新该页面。", "refresh" => true)); + } else { + // 失败 + EchoInfo(-1, array("msg" => "修改失败")); + } + } + break; + case "IPGetTable": + $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; + echo GetIPTablePage($page); + break; + case "NewIp": + $ip = (!empty($_POST["ip"])) ? trim($_POST["ip"]) : ""; + $remark = (!empty($_POST["remark"])) ? $_POST["remark"] : ""; + $type = $_POST["type"]; + if ($ip != "") { + // 开始录入 + $add_time = date("Y-m-d H:i:s"); + $sql = "INSERT INTO `" . $dbtable . "_ip`( `ip`, `remark`, `type`, `add_time`) VALUES ('$ip','$remark',$type,'$add_time')"; + $Result = mysqli_query($conn, $sql); + if ($Result != false) EchoInfo(0, array("msg" => "新增成功", "detail" => "成功新增一条ip记录。3s后将刷新该页面。", "refresh" => true)); + else { + $Error = addslashes(mysqli_error($conn)); + EchoInfo(-1, array("msg" => "添加失败", "detail" => $Error)); + } + } else EchoInfo(-1, array("msg" => "添加失败", "detail" => "请检查IP和账号种类是否填写正确")); + break; + case "setDownloadTimes": + $origin_config = file_get_contents("config.php"); + $update_config = str_replace('const DownloadTimes = ' . DownloadTimes . ';', 'const DownloadTimes = ' . $_POST["DownloadTimes"] . ';', $origin_config); + $len = file_put_contents('config.php', $update_config); + if ($len != false) EchoInfo(0, array("msg" => "设置成功", "detail" => "成功写入 config.php 共 $len 个字符。3s后将刷新该页面。", "refresh" => true)); + else EchoInfo(-1, array("msg" => "添加失败", "detail" => "请检查 config.php 文件状态及当前用户权限。或者手动修改 config.php 中相关设置。")); + break; + case "setSVIPSwitchMod": + $origin_config = file_get_contents("config.php"); + $update_config = str_replace('const SVIPSwitchMod = ' . SVIPSwitchMod . ';', 'const SVIPSwitchMod = ' . $_POST["SVIPSwitchMod"] . ';', $origin_config); + $len = file_put_contents('config.php', $update_config); + + if ($len != false) EchoInfo(0, array("msg" => "设置成功", "detail" => "成功写入 config.php 共 $len 个字符。3s后将刷新该页面。", "refresh" => true)); + else EchoInfo(-1, array("msg" => "添加失败", "detail" => "请检查 config.php 文件状态及当前用户权限。或者手动修改 config.php 中相关设置。")); + break; + case "DeleteById": + //通过指定表格与ip删除对应行 + $Type = (!empty($_GET["type"])) ? $_GET["type"] : ""; + $Id = (!empty($_GET["id"])) ? $_GET["id"] : ""; + if ($Type != "" and $Id != "") { + // 开始执行 + // 生成SQL + switch ($Type) { + case 'AnalyseTable': + // 使用统计 分析表格 $dbtable + $Sql = "DELETE FROM `$dbtable` WHERE `id` = $Id"; + break; + case 'SvipTable': + // 会员账号表格 + $Sql = "DELETE FROM `" . $dbtable . "_svip` WHERE `id` = $Id"; + break; + case 'IPTable': + // ip黑白名单 + $Sql = "DELETE FROM `" . $dbtable . "_ip` WHERE `id` = $Id"; + break; + default: + // 无匹配 + EchoInfo(-1, array("msg" => "传入Type(删除种类)错误")); + exit; + break; + } + // 开始执行sql + $Result = mysqli_query($conn, $Sql); + if ($Result != false) { + EchoInfo(0, array("msg" => "成功删除id为 $Id 的数据。3s后将刷新该页面。", "refresh" => true)); //成功删除 + } else { + $Error = addslashes(mysqli_error($conn)); + EchoInfo(-1, array("msg" => "删除失败,返回信息:$Error")); + } + } else EchoInfo(-1, array("msg" => "未传入Type(删除种类)或Id(删除指定的id)")); + break; + default: + EchoInfo(-1, array("msg" => "没有参数传入")); + break; + } + exit; +} switch ($method) { case 'LastParse': // 返回数据库中上一次解析的时间,及SVIP状态 @@ -60,7 +256,7 @@ "sviptips" => $SvipTips )); } else { - EchoInfo(0, array("msg" => "数据库中没有数据")); + EchoInfo(-1, array("msg" => "数据库中没有数据", "sviptips" => "Unknown")); } } else { // 未开启数据库 @@ -79,7 +275,7 @@ if ($Result = mysqli_fetch_assoc($mysql_query)) { // 存在数据 $AllCount = $Result["AllCount"]; - $AllSize = formatSize((int)$Result["AllSize"]); // 格式化获取到的文件大小 + $AllSize = formatSize((float)$Result["AllSize"]); // 格式化获取到的文件大小 $ParseCountMsg = "累计解析 $AllCount 个,共 $AllSize"; } else { EchoInfo(0, array("msg" => "当前数据库版本不支持此统计操作")); @@ -91,7 +287,7 @@ if ($Result = mysqli_fetch_assoc($mysql_query)) { // 存在数据 $AllCount = $Result["AllCount"]; - $AllSize = formatSize((int)$Result["AllSize"]); // 格式化获取到的文件大小 + $AllSize = formatSize((float)$Result["AllSize"]); // 格式化获取到的文件大小 $TodayParseCountMsg = "今日解析 $AllCount 个,共 $AllSize"; } else { EchoInfo(0, array("msg" => "当前数据库版本不支持此统计操作")); @@ -107,11 +303,11 @@ // 检查数据库连接是否正常 $servername = (!empty($_POST["servername"])) ? $_POST["servername"] : ""; $username = (!empty($_POST["username"])) ? $_POST["username"] : ""; - $password = (!empty($_POST["password"])) ? $_POST["password"] : ""; + $DBPassword = (!empty($_POST["DBPassword"])) ? $_POST["DBPassword"] : ""; $dbname = (!empty($_POST["dbname"])) ? $_POST["dbname"] : ""; $dbtable = (!empty($_POST["dbtable"])) ? $_POST["dbtable"] : ""; - $conn = mysqli_connect($servername, $username, $password); + $conn = mysqli_connect($servername, $username, $DBPassword); $GLOBALS['conn'] = $conn; // Check connection if (!$conn) { @@ -141,10 +337,3 @@ EchoInfo(-1, array("msg" => "无传入数据")); break; } - -function EchoInfo(int $error, array $Result) -{ - $ReturnArray = array("error" => $error); - $ReturnArray += $Result; - echo json_encode($ReturnArray); -} diff --git a/functions.php b/functions.php index 4729b3ac..7de3cf5e 100644 --- a/functions.php +++ b/functions.php @@ -12,12 +12,22 @@ * @link https://space.bilibili.com/88197958 * */ +$programVersion_Functions = '2.1.0'; if (!defined('init')) { // 直接访问处理程序 header('Content-Type: text/plain; charset=utf-8'); if (!file_exists('config.php')) { http_response_code(503); - header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); - die("HTTP 503 服务不可用!\r\n缺少相关配置和定义文件!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序!"); + } else { + require('config.php'); + if ($programVersion_Functions !== programVersion) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n配置文件版本异常!\r\n将在五秒内跳转到安装程序!\r\n若重新安装无法解决问题,请重新 Clone 项目并配置!"); + } } http_response_code(403); header('Refresh: 3;url=./'); @@ -127,7 +137,10 @@ function CheckPassword(bool $IsReturnBool = false) return $return; } if (!$return) { // 若 $IsReturnBool 为 false 且验证失败,则执行 dl_error + global $system_start_time; dl_error("密码错误", "请检查你输入的密码!"); + echo Footer; + die(''); } } else { // 若不校验密码则永远 true return true; @@ -236,8 +249,7 @@ function dl_error(string $title, string $content, bool $jumptip = false) } echo '
'; - return 0; + echo '

'; // 仅仅弹出提示框,并不结束进程 } function get_BDCLND($surl, $Pwd) { @@ -267,10 +279,10 @@ function connectdb(bool $isAPI = false) { $servername = DbConfig["servername"]; $username = DbConfig["username"]; - $password = DbConfig["password"]; + $DBPassword = DbConfig["DBPassword"]; $dbname = DbConfig["dbname"]; $GLOBALS['dbtable'] = DbConfig["dbtable"]; - $conn = mysqli_connect($servername, $username, $password, $dbname); + $conn = mysqli_connect($servername, $username, $DBPassword, $dbname); $GLOBALS['conn'] = $conn; // Check connection if (!$conn) { @@ -303,3 +315,123 @@ function GetList(string $Shorturl, string $Dir, bool $IsRoot, string $Password) } return $result; } +$getConstant = function (string $name) { + return constant($name); +}; +/* + * 优化 JavaScript 代码体积 + * beta 版本 + */ +$JSCode = array("get" => function (string $value) { + $value = preg_replace('# *//.*#', '', $value); + $value = preg_replace('#/\*.*?\*/#s', '', $value); + $value = preg_replace('#(\r?\n|\t| ){2,}#', '$1', $value); + $value = preg_replace('#([,;{])[ \t]*?\r?\n[ \t]*([^ \t])#', '$1 $2', $value); + $value = preg_replace('#(\r?\n|\t| ){2,}#', '$1', $value); + $value = preg_replace('#([^ \t])[ \t]*?\r?\n[ \t]*?\}#', '$1 }', $value); + $value = preg_replace('#(\r?\n|\t| ){2,}#', '$1', $value); + $value = preg_replace('#([,;{])\t+#', '$1 ', $value); + $value = preg_replace('#\t+\}#', ' }', $value); + $value = preg_replace('#(\r?\n|\t| ){2,}#', '$1', $value); + return $value; +}, "echo" => function (string $value) { + global $JSCode; + echo $JSCode['get']($value); +}); +/* + * 将settings.php里面的代码移到functions.php里面来 + * 方便api调用 + */ +function EchoInfo(int $error, array $Result) +{ + $ReturnArray = array("error" => $error); + $ReturnArray += $Result; + echo json_encode($ReturnArray); +} +function GetAnalyseTablePage(string $page) +{ + if ($page <= 0) exit; + $EachPageNum = 10; + $conn = $GLOBALS['conn']; + $dbtable = $GLOBALS['dbtable']; + $AllRow = ""; + $StartNum = ((int)$page - 1) * $EachPageNum; + $sql = "SELECT * FROM `$dbtable` ORDER BY `ptime` DESC LIMIT $StartNum,$EachPageNum"; + $mysql_query = mysqli_query($conn, $sql); + while ($Result = mysqli_fetch_assoc($mysql_query)) { + // 存在数据 + $EachRow = " + " . $Result["id"] . " +
+ 删除 +
+ " . $Result["userip"] . " + " . $Result["filename"] . " + " . formatSize((float)$Result["size"]) . " + " . $Result["path"] . " + " . substr($Result["realLink"], 0, 35) . "…… + " . $Result["ptime"] . "" . $Result["paccount"] . " + "; + $AllRow .= $EachRow; + } + return $AllRow; +} +function GetSvipTablePage(string $page) +{ + if ($page <= 0) exit; + $EachPageNum = 10; + $conn = $GLOBALS['conn']; + $dbtable = $GLOBALS['dbtable']; + $AllRow = ""; + $StartNum = ((int)$page - 1) * $EachPageNum; + $sql = "SELECT * FROM `" . $dbtable . "_svip` ORDER BY `id` DESC LIMIT $StartNum,$EachPageNum"; + $mysql_query = mysqli_query($conn, $sql); + while ($Result = mysqli_fetch_assoc($mysql_query)) { + // 存在数据 + $is_using = ($Result["is_using"] != "0000-00-00 00:00:00") ? $Result["is_using"] : ""; + $state = ($Result["state"] == -1) ? "限速" : "正常"; + $EachRow = " + " . $Result["id"] . " +
+ 使用此账号 + 重置状态 + 删除 +
+ " . $is_using . " + " . $Result["name"] . " + " . $state . " + " . $Result["add_time"] . " + " . substr($Result["svip_bduss"], 0, 20) . "…… + " . substr($Result["svip_stoken"], 0, 20) . "…… + "; + $AllRow .= $EachRow; + } + return $AllRow; +} // name 账号名称 svip_bduss 会员bduss svip_stoken 会员stoken add_time 会员账号加入时间 state 会员状态(0:正常,-1:限速) is_using 是否正在使用(非零表示真) +function GetIPTablePage(string $page) +{ + if ($page <= 0) exit; + $EachPageNum = 10; + $conn = $GLOBALS['conn']; + $dbtable = $GLOBALS['dbtable']; + $AllRow = ""; + $StartNum = ((int)$page - 1) * $EachPageNum; + $sql = "SELECT * FROM `" . $dbtable . "_ip` ORDER BY `id` DESC LIMIT $StartNum,$EachPageNum"; + $mysql_query = mysqli_query($conn, $sql); + while ($Result = mysqli_fetch_assoc($mysql_query)) { + // 存在数据 + $type = ($Result["type"] == -1) ? "黑名单" : "白名单"; + $EachRow = " + " . $Result["id"] . " +
+ 删除 +
+ " . $Result["ip"] . " + " . $type . " + " . $Result["remark"] . " + " . $Result["add_time"] . " + "; + $AllRow .= $EachRow; + } + return $AllRow; +} diff --git a/index.php b/index.php index 9b16702b..1e7d37b9 100644 --- a/index.php +++ b/index.php @@ -9,13 +9,14 @@ * * 此项目 GitHub 地址:https://github.com/yuantuo666/baiduwp-php * - * @version 2.0.0 + * @version 2.1.0 * * @author Yuan_Tuo * @link https://imwcr.cn/ * @link https://space.bilibili.com/88197958 * */ +$programVersion_Index = "2.1.0"; session_start(); define('init', true); if (version_compare(PHP_VERSION, '7.0.0', '<')) { @@ -28,7 +29,15 @@ http_response_code(503); header('Content-Type: text/plain; charset=utf-8'); header('Refresh: 5;url=install.php'); - die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序"); + die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序!"); +} else { + require('config.php'); + if ($programVersion_Index !== programVersion) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n配置文件版本异常!\r\n将在五秒内跳转到安装程序!\r\n若重新安装无法解决问题,请重新 Clone 项目并配置!"); + } } if (!(file_exists('functions.php') && file_exists('language.php'))) { http_response_code(503); @@ -36,10 +45,17 @@ header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); die("HTTP 503 服务不可用!\r\n缺少相关配置和定义文件!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); } +// 确认会员账号模式是否正常 +if (USING_DB == false and SVIPSwitchMod != 0) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); + die("HTTP 503 服务不可用!\r\n配置错误,未启用数据库无法使用其他会员模式!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); +} // 保存启动时间 $system_start_time = microtime(true); // 导入配置和函数 -require('config.php'); + require('language.php'); require('functions.php'); // 通用响应头 @@ -78,26 +94,35 @@ - + echo ''; + } + ?> @@ -129,7 +154,7 @@ function confirmdl(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, files } elseif (isset($_GET["usersettings"])) { // 用户设置页面 require("usersettings.php"); } elseif (isset($_POST["surl"])) { // 解析链接页面 - echo ''; + echo ''; CheckPassword(); $surl = $_POST["surl"]; // 含有1 $pwd = (!empty($_POST["pwd"])) ? $_POST["pwd"] : ""; @@ -183,7 +208,7 @@ function confirmdl(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, files $file = $filejson["list"][$i]; if ($file["isdir"] === 0) $filecontent .= '
  • ' . $file["server_filename"] . ' - ' . formatSize($file["size"]) . '
  • '; + ' . formatSize((float)$file["size"]) . ''; else $filecontent .= '
  • ' . $file["server_filename"] . '
  • '; } @@ -216,7 +241,7 @@ function confirmdl(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, files $file = $filejson["list"][$i]; if ($file["isdir"] === 0) $filecontent .= '
  • ' . $file["server_filename"] . ' - ' . formatSize($file["size"]) . '
  • '; + ' . formatSize((float)$file["size"]) . ''; else $filecontent .= '
  • ' . $file["server_filename"] . '
  • '; } @@ -243,6 +268,7 @@ function getip() return $ip; } $ip = getip(); + $isipwhite = FALSE; //初始化 防止报错 if (USING_DB) { connectdb(); @@ -309,41 +335,81 @@ function getip() $realLink = $result["realLink"]; $usingcache = true; } else { - // // 判断cookie 取消这个判断 下载次数限制在后台控制 - // if (!$isipwhite and !empty($_COOKIE["SESSID"]) and !$smallfile) { - // // 提示无权继续 - // dl_error("免费次数不足", "

    剩余解析次数为零,请明天再试。


    " . FileInfo($filename, $size, $md5, $server_ctime)); - // exit; - // } - if (USING_DB) { - // 判断今天内是否获取过文件 - if (!$isipwhite and !$smallfile) { // 白名单和小文件跳过 - // 获取解析次数 - $sql = "SELECT count(*) as Num FROM `$dbtable` WHERE `userip`='$ip' AND `size`>=52428800 AND date(`ptime`)=date(now());"; - $mysql_query = mysqli_query($conn, $sql); - $result = mysqli_fetch_assoc($mysql_query); - if ($result["Num"] >= DownloadTimes) { - // 提示无权继续 - // dl_error("免费次数不足", "

    数据库中无此文件解析记录。

    您已于 " . $result["ptime"] . " 时解析过文件“" . $result["filename"] . "”。

    剩余解析次数为零,请明天再试。


    " . FileInfo($filename, $size, $md5, $server_ctime)); - dl_error(Language["NoChance"], "

    数据库中无此文件解析记录。

    剩余解析次数为零,请明天再试。


    " . FileInfo($filename, $size, $md5, $server_ctime)); - exit; - } + + // 判断今天内是否获取过文件 + if (!$isipwhite and !$smallfile) { // 白名单和小文件跳过 + // 获取解析次数 + $sql = "SELECT count(*) as Num FROM `$dbtable` WHERE `userip`='$ip' AND `size`>=52428800 AND date(`ptime`)=date(now());"; + $mysql_query = mysqli_query($conn, $sql); + $result = mysqli_fetch_assoc($mysql_query); + if ($result["Num"] >= DownloadTimes) { + // 提示无权继续 + dl_error(Language["NoChance"], "

    数据库中无此文件解析记录。

    剩余解析次数为零,请明天再试。


    " . FileInfo($filename, $size, $md5, $server_ctime)); + exit; } - // 获取SVIP BDUSS - - $sql = "SELECT `id`,`svip_bduss` FROM `" . $dbtable . "_svip` WHERE `state`!=-1 ORDER BY `is_using` DESC LIMIT 0,1"; // 时间倒序输出第一项未被限速账号 - $Result = mysqli_query($conn, $sql); - if ($Result = mysqli_fetch_assoc($Result)) { - $SVIP_BDUSS = $Result["svip_bduss"]; - $id = $Result["id"]; - } else { - // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + } + + // 获取SVIP BDUSS + switch (SVIPSwitchMod) { + case 1: + //模式1:用到废为止 + // 时间倒序输出第一项未被限速账号 + $sql = "SELECT `id`,`svip_bduss` FROM `" . $dbtable . "_svip` WHERE `state`!=-1 ORDER BY `is_using` DESC,`id` DESC LIMIT 0,1"; + $Result = mysqli_query($conn, $sql); + if ($Result = mysqli_fetch_assoc($Result)) { + $SVIP_BDUSS = $Result["svip_bduss"]; + $id = $Result["id"]; + } else { + // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + $SVIP_BDUSS = SVIP_BDUSS; + $id = "-1"; + } + break; + case 2: + //模式2:轮番上 + // 时间顺序输出第一项未被限速账号 + $sql = "SELECT `id`,`svip_bduss` FROM `" . $dbtable . "_svip` WHERE `state`!=-1 ORDER BY `is_using` ASC,`id` DESC LIMIT 0,1"; + + $Result = mysqli_query($conn, $sql); + if ($Result = mysqli_fetch_assoc($Result)) { + $SVIP_BDUSS = $Result["svip_bduss"]; + $id = $Result["id"]; + //不论解析成功与否,将当前账号更新时间,下一次使用另一账号 + // 开始处理 + // 这里最新的时间表示可用账号,按顺序排序 + $is_using = date("Y-m-d H:i:s"); + $sql = "UPDATE `" . $dbtable . "_svip` SET `is_using`= '$is_using' WHERE `id`=$id"; + $mysql_query = mysqli_query($conn, $sql); + if ($mysql_query == false) { + // 失败 但可继续解析 + dl_error("数据库错误", "请联系站长修复无法自动切换账号问题!"); + } + } else { + // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + $SVIP_BDUSS = SVIP_BDUSS; + $id = "-1"; + } + break; + case 3: + //模式3:手动切换,不管限速 + // 时间倒序输出第一项账号,不管限速 + $sql = "SELECT `id`,`svip_bduss` FROM `" . $dbtable . "_svip` ORDER BY `is_using` DESC,`id` DESC LIMIT 0,1"; + $Result = mysqli_query($conn, $sql); + if ($Result = mysqli_fetch_assoc($Result)) { + $SVIP_BDUSS = $Result["svip_bduss"]; + $id = $Result["id"]; + } else { + // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + $SVIP_BDUSS = SVIP_BDUSS; + $id = "-1"; + } + break; + case 0: + //模式0:使用本地解析 + default: $SVIP_BDUSS = SVIP_BDUSS; $id = "-1"; - } - } else { - $SVIP_BDUSS = SVIP_BDUSS; - $id = "-1"; + break; } @@ -359,41 +425,49 @@ function getip() else $realLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// $usingcache = false; - - if (USING_DB) { - // 判断账号是否限速,如果限速就将其标记,切换账号 - if (strstr('https://' . $realLink, "//qdall") or $realLink == "") { - // 限速 - if ($id != "-1") { + switch (SVIPSwitchMod) { + case 1: + //模式1:用到废为止 + case 2: + //模式2:轮番上 + if (strstr('https://' . $realLink, "//qdall") or $realLink == "") { + //限速进行标记 并刷新页面重新解析 $sql = "UPDATE `" . $dbtable . "_svip` SET `state`= -1 WHERE `id`=$id"; $mysql_query = mysqli_query($conn, $sql); if ($mysql_query != false) { // SVIP账号自动切换成功,对用户界面进行刷新进行重新获取 - ?> -
    -
    - -
    - - + setTimeout(() => location.reload(), 2000); + +SWITCHTIP; + exit; } else { // SVIP账号自动切换失败 - + dl_error("SVIP账号切换失败", "数据库出现问题,无法切换SVIP账号,请联系站长修复", true); + exit; } - } else { - // 本地账号也限速 } - } + break; + case 3: + //模式3:手动切换,不管限速 + case 0: + //模式0:使用本地解析 + default: + break; } } @@ -419,7 +493,7 @@ function getip() // 为了防止一些换ip调用,这里写一个cookie } - ?> + ?>
    "; + } + function getConfig(&$var, string $name, $default = '') + { + $var = defined($name) ? constant($name) : $default; + } + getConfig($Sitename, 'Sitename'); + getConfig($IsCheckPassword, 'IsCheckPassword', true); + getConfig($Password, 'Password'); + getConfig($ADMIN_PASSWORD, 'ADMIN_PASSWORD'); + getConfig($DownloadTimes, 'DownloadTimes', '5'); + getConfig($IsConfirmDownload, 'IsConfirmDownload', true); + getConfig($Footer, 'Footer'); + + getConfig($BDUSS, 'BDUSS'); + getConfig($STOKEN, 'STOKEN'); + getConfig($SVIP_BDUSS, 'SVIP_BDUSS'); + getConfig($SVIPSwitchMod, 'SVIPSwitchMod', '0'); // 有bug隐患 如果未开启数据库,必须为0 + + getConfig($USING_DB, 'USING_DB', true); + if (defined('DbConfig')) { + function getDbConfig(&$var, string $key) + { + $var = isset(DbConfig[$key]) ? DbConfig[$key] : ''; + } + getDbConfig($servername, 'servername'); + getDbConfig($username, 'username'); + getDbConfig($DBPassword, 'DBPassword'); + getDbConfig($dbname, 'dbname'); + getDbConfig($dbtable, 'dbtable'); + } ?>
    @@ -78,7 +123,7 @@
    - + 设置你的站点名称,将在首页标题处显示。
    @@ -86,13 +131,13 @@
    - + >
    - + > @@ -100,24 +145,24 @@ 若开启,则在使用解析前必须输入设置的密码;若关闭(一般用于局域网搭建),则无需输入密码即可解析。
    -
    +
    >
    - + 在首页需要输入的密码,至少需要6位字符。
    - + 用于登录管理后台(setting.php)的密码。
    - + 设置每一个IP的下载次数。
    @@ -125,13 +170,13 @@
    - + >
    - + > @@ -141,7 +186,7 @@
    - + 通常用于设置隐藏的统计代码。
    @@ -151,21 +196,21 @@
    - + 用来获取文件列表及信息,不需要SVIP也可。
    - + 用来获取文件列表及信息,不需要SVIP也可。
    - + 用来获取文件告诉下载地址,必须为SVIP账号,否则将获取到限速地址。
    @@ -175,13 +220,13 @@
    - + >
    - + > @@ -189,40 +234,64 @@ 如需使用记录解析数据、设置黑\白名单、自动切换限速SVIP账号等功能,需开启数据库。
    -
    +
    >
    - + 填入MySQL数据库的地址。
    - +
    - +
    - + 如果此数据库不存在将会在检查连接时自动创建。
    - + 一般情况无需修改
    + +
    + +
    + + + 本地模式:不管是否限速,一直使用本地账号解析。
    + 顺序模式:一直使用设置的账号解析,用到会员账号失效切换下一账号;当数据库中会员账号失效后,会使用本地账号解析。
    + 轮换模式:解析一次就切换一次账号,只使用会员账号;当数据库中会员账号失效后,会使用本地账号解析。
    + 手动模式:不管是否限速,一直使用数据库中设置的账号。 +
    +
    +
    + +
    + + + 如果勾选此选项,将不会执行导入数据库操作,但请保证安装的新版本数据结构与旧版本一致,否则可能出现不可预料的错误。 +
    检查数据库连接

    @@ -232,18 +301,43 @@

    我同意在首页及其他页面保留作者版权信息

    -
    - - - 安装操作将会清空 MySQL数据库 及 本地config.php文件。如果你曾使用过本项目,请备份好数据后再点击提交。 -
    + 提交 - 1. 由于新版本更新了css和js文件,如果你的网站有缓存,请在清理后访问首页(一般CDN会提供此功能);如果浏览器存在缓存,请按下Ctrl+F5强制刷新,或进入设置页面删除缓存,否则可能遇到无法使用的问题。 - 2. 安装完成后请及时删除本安装文件。 + TIPS:1. 由于新版本可能更新了css和js文件,如果你的网站有缓存,请在清理后访问首页(一般CDN会提供此功能);如果浏览器存在缓存,请按下Ctrl+F5强制刷新,或进入设置页面删除缓存,否则可能遇到无法使用的问题。 + 2. 你可以手动在当前目录下新建一个 notice.html 文件,当加载首页时会自动引用该文件。

    @@ -408,49 +471,55 @@ function CheckForm() { // 处理post数据 $Sitename = (!empty($_POST["Sitename"])) ? $_POST["Sitename"] : ""; - $IsCheckPassword = (!empty($_POST["IsCheckPassword"])) ? $_POST["IsCheckPassword"] : ""; + $IsCheckPassword = (!empty($_POST["IsCheckPassword"])) ? $_POST["IsCheckPassword"] : "true"; $Password = (!empty($_POST["Password"])) ? $_POST["Password"] : ""; $ADMIN_PASSWORD = (!empty($_POST["ADMIN_PASSWORD"])) ? $_POST["ADMIN_PASSWORD"] : ""; $DownloadTimes = (!empty($_POST["DownloadTimes"])) ? $_POST["DownloadTimes"] : ""; - $IsConfirmDownload = (!empty($_POST["IsConfirmDownload"])) ? $_POST["IsConfirmDownload"] : ""; + $IsConfirmDownload = (!empty($_POST["IsConfirmDownload"])) ? $_POST["IsConfirmDownload"] : "true"; $Footer = (!empty($_POST["Footer"])) ? $_POST["Footer"] : ""; $BDUSS = (!empty($_POST["BDUSS"])) ? $_POST["BDUSS"] : ""; $STOKEN = (!empty($_POST["STOKEN"])) ? $_POST["STOKEN"] : ""; $SVIP_BDUSS = (!empty($_POST["SVIP_BDUSS"])) ? $_POST["SVIP_BDUSS"] : ""; - $USING_DB = (!empty($_POST["USING_DB"])) ? $_POST["USING_DB"] : ""; + $USING_DB = (!empty($_POST["USING_DB"])) ? $_POST["USING_DB"] : "false"; $servername = (!empty($_POST["DbConfig_servername"])) ? $_POST["DbConfig_servername"] : ""; $username = (!empty($_POST["DbConfig_username"])) ? $_POST["DbConfig_username"] : ""; - $password = (!empty($_POST["DbConfig_password"])) ? $_POST["DbConfig_password"] : ""; + $DBPassword = (!empty($_POST["DbConfig_DBPassword"])) ? $_POST["DbConfig_DBPassword"] : ""; $dbname = (!empty($_POST["DbConfig_dbname"])) ? $_POST["DbConfig_dbname"] : ""; $dbtable = (!empty($_POST["DbConfig_dbtable"])) ? $_POST["DbConfig_dbtable"] : ""; + $ReserveDBData = (!empty($_POST["ReserveDBData"])) ? $_POST["ReserveDBData"] : "false"; // 是否保存以前数据库数据 未选中不会提交 + $SVIPSwitchMod = (!empty($_POST["SVIPSwitchMod"])) ? $_POST["SVIPSwitchMod"] : "0"; - if ($USING_DB == "true") { + if ($USING_DB == "true") { //注意判断要用string类型进行 // 连接数据库 - $conn = mysqli_connect($servername, $username, $password, $dbname); + $conn = mysqli_connect($servername, $username, $DBPassword, $dbname); // Check connection if (!$conn) { die("数据库连接错误,详细信息:" . mysqli_connect_error()); } - // 打开sql文件 - $SQLfile = file_get_contents("./install/bdwp.sql"); - if ($SQLfile == false) die("无法打开bdwp.sql文件"); - - $SQLfile = str_replace('', $dbtable, $SQLfile); - - $sccess_result = 0; - if (mysqli_multi_query($conn, $SQLfile)) { - do { - $sccess_result = $sccess_result + 1; - } while (mysqli_more_results($conn) && mysqli_next_result($conn)); - } - - $affect_row = mysqli_affected_rows($conn); - if ($affect_row == -1) { - die("数据库导入出错,错误在" . $sccess_result . "行"); + if ($ReserveDBData == "true") { + echo "保存以前数据库数据
    "; } else { - echo "数据库导入成功,成功导入" . $sccess_result . "条数据
    "; + // 打开sql文件 + $SQLfile = file_get_contents("./install/bdwp.sql"); + if ($SQLfile == false) die("无法打开bdwp.sql文件"); + + $SQLfile = str_replace('', $dbtable, $SQLfile); + + $sccess_result = 0; + if (mysqli_multi_query($conn, $SQLfile)) { + do { + $sccess_result = $sccess_result + 1; + } while (mysqli_more_results($conn) && mysqli_next_result($conn)); + } + + $affect_row = mysqli_affected_rows($conn); + if ($affect_row == -1) { + die("数据库导入出错,错误在" . $sccess_result . "行"); + } else { + echo "数据库导入成功,成功导入" . $sccess_result . "条数据
    "; + } } } else { echo "不启用数据库
    "; @@ -477,9 +546,10 @@ function CheckForm() { $update_config = str_replace('', $USING_DB, $update_config); $update_config = str_replace('', $servername, $update_config); $update_config = str_replace('', $username, $update_config); - $update_config = str_replace('', $password, $update_config); + $update_config = str_replace('', $DBPassword, $update_config); $update_config = str_replace('', $dbname, $update_config); $update_config = str_replace('', $dbtable, $update_config); + $update_config = str_replace('', $SVIPSwitchMod, $update_config); $len = file_put_contents('config.php', $update_config); @@ -488,8 +558,8 @@ function CheckForm() { } else { die("写入 config.php 文件失败,请检查 config.php 文件状态及当前用户权限。"); } - header('Refresh: 3;url=./'); - echo "恭喜你!你的安装成功了~
    浏览器将会在3s内自动跳转,若没有跳转可点此链接前往主页查看。"; + header('Refresh: 5;url=./'); + echo "恭喜你!安装成功了~
    浏览器将会在5s内自动跳转,若没有跳转可点此链接前往主页查看。"; } ?>
    diff --git a/install/config_raw b/install/config_raw index 2caf2bac..a440c336 100644 --- a/install/config_raw +++ b/install/config_raw @@ -3,17 +3,34 @@ * PanDownload 网页复刻版,PHP 语言版配置文件 * !!!请勿修改本文件,如果手动修改后再在后台设置,可能导致config.php文件被清空!!! * - * @version 2.0.0 + * @version 2.1.0 * @author Yuan_Tuo * @link https://imwcr.cn/ * @link https://space.bilibili.com/88197958 */ -const programVersion = '2.0.0'; +const programVersion = '2.1.0'; if (!defined('init')) { http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); header('Refresh: 3;url=./'); die("HTTP 403 禁止访问!\r\n此文件是 PanDownload 网页复刻版 PHP 语言版项目版本 " . programVersion . " 的配置文件!\r\n禁止直接访问!"); } -const Sitename = ''; const BDUSS = ''; const STOKEN = ''; const SVIP_BDUSS = ''; const IsCheckPassword = ; -const Password = ''; const Footer = '
    '; const APP_ID = '250528'; const DEBUG = false; const USING_DB = ; -const DbConfig = array("servername" => "", "username" => "", "password" => "", "dbname" => "", "dbtable" => ""); -const ADMIN_PASSWORD = ''; const DownloadTimes = ; const IsConfirmDownload = ; \ No newline at end of file +const Sitename = ''; + +const BDUSS = ''; +const STOKEN = ''; +const SVIP_BDUSS = ''; + +const IsCheckPassword = ; +const Password = ''; +const Footer = <<<'FoOtEr_Made_By_YuanTuo' +
    +FoOtEr_Made_By_YuanTuo; +const APP_ID = '250528'; +const DEBUG = false; + +const USING_DB = ; +const DbConfig = array("servername" => "", "username" => "", "DBPassword" => "", "dbname" => "", "dbtable" => ""); + +const ADMIN_PASSWORD = ''; +const DownloadTimes = ; +const IsConfirmDownload = ; +const SVIPSwitchMod = ; \ No newline at end of file diff --git a/settings.php b/settings.php index 342cbf87..c5b652a5 100644 --- a/settings.php +++ b/settings.php @@ -5,13 +5,12 @@ * * 设置及后台功能 * - * @version 2.0.0 - * * @author Yuan_Tuo * @link https://imwcr.cn/ * @link https://space.bilibili.com/88197958 * */ +$programVersion_Settings = '2.1.0'; session_start(); define('init', true); if (version_compare(PHP_VERSION, '7.0.0', '<')) { @@ -20,14 +19,27 @@ header('Refresh: 5;url=https://www.php.net/downloads.php'); die("HTTP 503 服务不可用!\r\nPHP 版本过低!无法正常运行程序!\r\n请安装 7.0.0 或以上版本的 PHP!\r\n将在五秒内跳转到 PHP 官方下载页面!"); } -if (!(file_exists('config.php') && file_exists('functions.php'))) { +if (!file_exists('functions.php')) { http_response_code(503); header('Content-Type: text/plain; charset=utf-8'); header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); die("HTTP 503 服务不可用!\r\n缺少相关配置和定义文件!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); } // 导入配置和函数 -require('config.php'); +if (!file_exists('config.php')) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序!"); +} else { + require('config.php'); + if ($programVersion_Settings !== programVersion) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n配置文件版本异常!\r\n将在五秒内跳转到安装程序!\r\n若重新安装无法解决问题,请重新 Clone 项目并配置!"); + } +} require('functions.php'); // 通用响应头 header('Content-Type: text/html; charset=utf-8'); @@ -49,138 +61,10 @@ } else { // 密码错误 $_SESSION["admin_login"] = false; - echo ""; + $PasswordError = true; } } if ($is_login) connectdb(); -if ($method == "API" and $is_login) { - $action = (!empty($_GET["act"])) ? $_GET["act"] : ""; - switch ($action) { - case "AnalyseGetTable": - $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; - echo GetAnalyseTablePage($page); - break; - case "SvipGetTable": - $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; - echo GetSvipTablePage($page); - break; - case "SvipSettingFirstAccount": - $id = (!empty($_GET["id"])) ? $_GET["id"] : ""; - if ($id == "") { - // 参数错误 - EchoInfo(-1, array("msg" => "传入参数错误")); - } else { - // 开始处理 - // 这里最新的时间表示可用账号,按顺序排序 - $is_using = date("Y-m-d H:i:s"); - $sql = "UPDATE `" . $dbtable . "_svip` SET `is_using`= '$is_using' WHERE `id`=$id"; - $mysql_query = mysqli_query($conn, $sql); - if ($mysql_query != false) { - // 成功 - EchoInfo(0, array("msg" => "ID为 $id 的账号已被设置为首选账号。3s后将刷新该页面。", "refresh" => true)); - } else { - // 失败 - EchoInfo(-1, array("msg" => "修改失败")); - } - } - break; - case "IPGetTable": - $page = (!empty($_GET["page"])) ? $_GET["page"] : ""; - echo GetIPTablePage($page); - break; - default: - echo "

    没有参数传入

    "; - break; - } - exit; -} - -function EchoInfo(int $error, array $Result) -{ - $ReturnArray = array("error" => $error); - $ReturnArray += $Result; - echo json_encode($ReturnArray); -} - -function GetAnalyseTablePage(string $page) -{ - if ($page <= 0) exit; - $EachPageNum = 10; - $conn = $GLOBALS['conn']; - $dbtable = $GLOBALS['dbtable']; - $AllRow = ""; - $StartNum = ((int)$page - 1) * $EachPageNum; - $sql = "SELECT * FROM `$dbtable` ORDER BY `ptime` DESC LIMIT $StartNum,$EachPageNum"; - $mysql_query = mysqli_query($conn, $sql); - while ($Result = mysqli_fetch_assoc($mysql_query)) { - // 存在数据 - $EachRow = " - " . $Result["id"] . " - 暂未开发 - " . $Result["userip"] . " - " . $Result["filename"] . " - " . formatSize((int)$Result["size"]) . " - " . $Result["path"] . " - " . substr($Result["realLink"], 0, 35) . "…… - " . $Result["ptime"] . "" . $Result["paccount"] . " - "; - $AllRow .= $EachRow; - } - return $AllRow; -} -function GetSvipTablePage(string $page) -{ - if ($page <= 0) exit; - $EachPageNum = 10; - $conn = $GLOBALS['conn']; - $dbtable = $GLOBALS['dbtable']; - $AllRow = ""; - $StartNum = ((int)$page - 1) * $EachPageNum; - $sql = "SELECT * FROM `" . $dbtable . "_svip` ORDER BY `id` DESC LIMIT $StartNum,$EachPageNum"; - $mysql_query = mysqli_query($conn, $sql); - while ($Result = mysqli_fetch_assoc($mysql_query)) { - // 存在数据 - $is_using = ($Result["is_using"] != "0000-00-00 00:00:00") ? $Result["is_using"] : ""; - $state = ($Result["state"] == -1) ? "限速" : "正常"; - $EachRow = " - " . $Result["id"] . " - 设为当前解析账号 - " . $is_using . " - " . $Result["name"] . " - " . $state . " - " . $Result["add_time"] . " - " . substr($Result["svip_bduss"], 0, 20) . "…… - " . substr($Result["svip_stoken"], 0, 20) . "…… - "; - $AllRow .= $EachRow; - } - return $AllRow; -} // name 账号名称 svip_bduss 会员bduss svip_stoken 会员stoken add_time 会员账号加入时间 state 会员状态(0:正常,-1:限速) is_using 是否正在使用(非零表示真) -function GetIPTablePage(string $page) -{ - if ($page <= 0) exit; - $EachPageNum = 10; - $conn = $GLOBALS['conn']; - $dbtable = $GLOBALS['dbtable']; - $AllRow = ""; - $StartNum = ((int)$page - 1) * $EachPageNum; - $sql = "SELECT * FROM `" . $dbtable . "_ip` ORDER BY `id` DESC LIMIT $StartNum,$EachPageNum"; - $mysql_query = mysqli_query($conn, $sql); - while ($Result = mysqli_fetch_assoc($mysql_query)) { - // 存在数据 - $type = ($Result["type"] == -1) ? "黑名单" : "白名单"; - $EachRow = " - " . $Result["id"] . " - " . $Result["ip"] . " - " . $type . " - " . $Result["remark"] . " - " . $Result["add_time"] . " - "; - $AllRow .= $EachRow; - } - return $AllRow; -} - ?> @@ -203,6 +87,7 @@ function GetIPTablePage(string $page) + @@ -216,14 +101,24 @@ function GetIPTablePage(string $page)
    -
    Pandownload复刻版-后台登录
    +
    Pandownload复刻版 - 后台登录
    -
    +
    - 密码是中文,别想破解了~ + 忘记密码可进入config.php中查看~
    - + +
    +
    @@ -275,71 +170,23 @@ function GetIPTablePage(string $page) 加载更多
    - Swal.fire('新增成功');"; - else { - $Error = addslashes(mysqli_error($conn)); - echo ""; - } - } else { - echo ""; - } - } - if (isset($_POST["MULTI_BDUSS"])) { - $BDUSS = (!empty($_POST["MULTI_BDUSS"])) ? trim($_POST["MULTI_BDUSS"]) : ""; - $name = (!empty($_POST["name"])) ? $_POST["name"] : ""; - if ($BDUSS != "") { - // 开始录入 - $allsql = ""; - $add_time = date("Y-m-d H:i:s"); - - $AllBduss = explode("\n", $BDUSS); - for ($i = 0; $i < count($AllBduss); $i++) { - $sql = "INSERT INTO `" . $dbtable . "_svip`( `name`, `svip_bduss`, `add_time`, `state`, `is_using`) VALUES ('$name-" . ($i + 1) . "','" . $AllBduss[$i] . "','$add_time',1,'');"; - $allsql .= $sql; - } - - $sccess_result = 0; - if (mysqli_multi_query($conn, $allsql)) { - do { - $sccess_result = $sccess_result + 1; - } while (mysqli_more_results($conn) && mysqli_next_result($conn)); - } - - $affect_row = mysqli_affected_rows($conn); - if ($affect_row == -1) { - $Msg = "错误在" . $sccess_result . "行"; - } else { - $Msg = "成功导入" . $sccess_result . "条数据"; - } - echo ""; - } else { - echo ""; - } - } - - ?> +
    + + + +
    +
    + 会员账号切换模式 +
    +
    +
    会员账号切换模式
    + "; + ?> + 本地模式:不管是否限速,一直使用本地账号解析。
    + 顺序模式:一直使用设置的账号解析,用到会员账号失效切换下一账号;当数据库中会员账号失效后,会使用本地账号解析。
    + 轮换模式:解析一次就切换一次账号,只使用会员账号;当数据库中会员账号失效后,会使用本地账号解析。
    + 手动模式:不管是否限速,一直使用数据库中设置的账号。 +
    + 注意!此功能需要修改config.php的信息,请小心使用。 +

    + +
    修改会员账号切换模式
    +
    +
    + + +
    + +
    +
    @@ -622,7 +523,7 @@ function IPLoadmore() { $Result = mysqli_fetch_assoc(mysqli_query($conn, $sql)); // 存在数据 $AllCount = $Result["AllCount"]; - $AllSize = formatSize((int)$Result["AllSize"]); // 格式化获取到的文件大小 + $AllSize = formatSize((float)$Result["AllSize"]); // 格式化获取到的文件大小 echo "累计解析 $AllCount 个,共 $AllSize"; ?>
    @@ -631,7 +532,7 @@ function IPLoadmore() { $Result = mysqli_fetch_assoc(mysqli_query($conn, $sql)); // 存在数据 $AllCount = $Result["AllCount"]; - $AllSize = formatSize((int)$Result["AllSize"]); // 格式化获取到的文件大小 + $AllSize = formatSize((float)$Result["AllSize"]); // 格式化获取到的文件大小 echo "今日解析 $AllCount 个,共 $AllSize"; ?>

    @@ -694,6 +595,35 @@ function IPLoadmore() {

    +
    +
    +
    会员账号切换模式
    +

    + +

    + 查看详细情况 +

    +
    +
    @@ -709,7 +639,44 @@ function IPLoadmore() { - + \ No newline at end of file diff --git a/static/color.js b/static/color.js index 3b01dde6..a793b758 100644 --- a/static/color.js +++ b/static/color.js @@ -1,27 +1,16 @@ const colorMode = localStorage.getItem('colorMode'); // 获取色彩模式配置 if (colorMode === null) { // 若没有配置(跟随浏览器) - if (window.matchMedia('(prefers-color-scheme: dark)').matches) { // 深色模式 - document.querySelector('#ColorMode-Dark').disabled = false; - document.querySelector('#Swal2-Dark').disabled = false; - } else if (window.matchMedia('(prefers-color-scheme: light)').matches) { // 浅色模式 - document.querySelector('#ColorMode-Dark').disabled = true; - document.querySelector('#Swal2-Light').disabled = false; - } -} else if (colorMode === 'dark') { // 深色模式 - document.querySelector('#ColorMode-Dark').disabled = false; - document.querySelector('#Swal2-Dark').disabled = false; -} else if (colorMode === 'light') { // 浅色模式 - document.querySelector('#ColorMode-Dark').disabled = true; - document.querySelector('#Swal2-Light').disabled = false; -} else { // 配置错误时的自动纠正程序 + if (window.matchMedia('(prefers-color-scheme: dark)').matches) DarkMod(); // 深色模式 + else if (window.matchMedia('(prefers-color-scheme: light)').matches) LightMod();// 浅色模式 + else LightMod(); // 对于不支持选择的老版本浏览器,启用浅色模式 +} else if (colorMode === 'dark') DarkMod(); // 深色模式 +else if (colorMode === 'light') LightMod(); // 浅色模式 +else { // 配置错误时的自动纠正程序 localStorage.removeItem('colorMode'); - if (window.matchMedia('(prefers-color-scheme: dark)').matches) { - document.querySelector('#ColorMode-Dark').disabled = false; - document.querySelector('#Swal2-Dark').disabled = false; - } else if (window.matchMedia('(prefers-color-scheme: light)').matches) { - document.querySelector('#ColorMode-Dark').disabled = true; - document.querySelector('#Swal2-Light').disabled = false; - } + if (window.matchMedia('(prefers-color-scheme: dark)').matches) DarkMod(); + else if (window.matchMedia('(prefers-color-scheme: light)').matches) LightMod(); + else LightMod(); // 对于不支持选择的老版本浏览器,启用浅色模式 + document.addEventListener('DOMContentLoaded', function () { Swal.fire({ title: '错误', @@ -32,4 +21,13 @@ if (colorMode === null) { // 若没有配置(跟随浏览器) location.reload(); }); }); +} + +function LightMod() { + document.querySelector('#ColorMode-Dark').disabled = true; + document.querySelector('#Swal2-Light').disabled = false; +} +function DarkMod() { + document.querySelector('#ColorMode-Dark').disabled = false; + document.querySelector('#Swal2-Dark').disabled = false; } \ No newline at end of file diff --git a/usersettings.php b/usersettings.php index cbffc661..dc189a2c 100644 --- a/usersettings.php +++ b/usersettings.php @@ -10,12 +10,22 @@ * @link https://space.bilibili.com/88197958 * */ +$programVersion_UserSettings = '2.1.0'; if (!defined('init')) { // 直接访问处理程序 header('Content-Type: text/plain; charset=utf-8'); if (!file_exists('config.php')) { http_response_code(503); - header('Refresh: 5;url=https://github.com/yuantuo666/baiduwp-php'); - die("HTTP 503 服务不可用!\r\n缺少相关配置和定义文件!无法正常运行程序!\r\n请重新 Clone 项目并配置!\r\n将在五秒内跳转到 GitHub 储存库!"); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n暂未安装此程序!\r\n将在五秒内跳转到安装程序!"); + } else { + require('config.php'); + if ($programVersion_UserSettings !== programVersion) { + http_response_code(503); + header('Content-Type: text/plain; charset=utf-8'); + header('Refresh: 5;url=install.php'); + die("HTTP 503 服务不可用!\r\n配置文件版本异常!\r\n将在五秒内跳转到安装程序!\r\n若重新安装无法解决问题,请重新 Clone 项目并配置!"); + } } http_response_code(403); header('Refresh: 3;url=./');