From 5fa0db6f513a9cf5e7ebe645883183978d81e887 Mon Sep 17 00:00:00 2001 From: yuantuo666 Date: Thu, 24 Nov 2022 13:48:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=8A=A5=E9=94=99=209019=20=E9=97=AE=E9=A2=98=20#225=20#227?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +- common/download.php | 365 ++++++++++++++++++++++---------------------- functions.php | 2 +- index.php | 2 +- install.php | 18 +++ install/config_raw | 3 +- updater.php | 2 +- 7 files changed, 209 insertions(+), 193 deletions(-) diff --git a/README.md b/README.md index e22cb798..5d90a9f3 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ PanDownload 网页复刻版,PHP 语言版
由于百度网盘修改分享页面JavaScript代码,导致 `2.1.3` 及以前版本失效。详细信息参见[#93](https://github.com/yuantuo666/baiduwp-php/issues/93) -由于百度网盘修改分享下载接口参数,导致所有旧版本失效,请更新至 `2.2.4.1` 或更新版本体验本项目。
+由于百度网盘修改分享下载接口,导致所有旧版本失效,请更新至 `2.2.5` 或更新版本体验本项目。

点此查看本项目安装、配置、使用视频教程
@@ -67,13 +67,11 @@ PanDownload 网页复刻版,PHP 语言版
在**SVIP账号**中可设置**SVIP账号**的**BDUSS**和**STOKEN**,添加账号后记得进入**会员账号切换模式**将模式改成**顺序模式**或**轮换模式**。
## 📦New Changes -- 当前版本: `2.2.4.1` (2.2.4版本未更新版本号) -- 更新日期:2022-10-24 +- 当前版本: `2.2.5` +- 更新日期:2022-11-24 - 修改内容: - ⚠错误修复 - - 修复 因百度对下载接口调整导致的失效问题 #224 - - ♻代码优化 - - 可发送下载任务至文件蜈蚣下载 #187 + - 修复 下载报错 9019 问题 #225 #227 [查看更多](Update.md) diff --git a/common/download.php b/common/download.php index 5249c4fe..e95bd70c 100644 --- a/common/download.php +++ b/common/download.php @@ -55,67 +55,78 @@ $uk = sanitizeContent($_POST["uk"], 'number'); // only number $json4 = getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk, APP_ID); -if ($json4["errno"] == 0) { - $dlink = $json4["list"][0]["dlink"]; - // 获取文件相关信息 - $md5 = sanitizeContent($json4["list"][0]["md5"]); - $filename = $json4["list"][0]["server_filename"]; - $size = sanitizeContent($json4["list"][0]["size"], "number"); - $path = $json4["list"][0]["path"]; - $server_ctime = (int)$json4["list"][0]["server_ctime"] + 28800; // 服务器创建时间 +8:00 +if ($json4["errno"] !== 0) { + $error = [ + -9 => ["文件不存在(-9)", "请返回首页重新解析。"], + 112 => ["链接超时(112)", "获取链接超时,每次解析列表后只有5min有效时间,请返回首页重新解析。"], + 113 => ["传参错误(113)", "获取失败,请检查参数是否正确。"], + 118 => ["服务器错误(118)", "服务器错误,请求百度服务器时,未传入sekey参数或参数错误。"], + 110 => ["服务器错误(110)", "服务器错误,可能服务器IP被百度封禁,请切换 IP 或更换服务器重试。"], + ]; + if (isset($error[$json4["errno"]])) dl_error($error[$json4["errno"]][0], $error[$json4["errno"]][1]); + else dl_error("获取下载链接失败", "未知错误!
错误号:" . $json4["errno"], true); // 未知错误 +} - if (USING_DB) { - connectdb(); +$dlink = $json4["list"][0]["dlink"]; +// 获取文件相关信息 +$md5 = sanitizeContent($json4["list"][0]["md5"]); +$filename = $json4["list"][0]["server_filename"]; +$size = sanitizeContent($json4["list"][0]["size"], "number"); +$path = $json4["list"][0]["path"]; +$server_ctime = (int)$json4["list"][0]["server_ctime"] + 28800; // 服务器创建时间 +8:00 - $DownloadLinkAvailableTime = (is_int(DownloadLinkAvailableTime)) ? DownloadLinkAvailableTime : 8; - // 查询数据库中是否存在已经保存的数据 - $sql = "SELECT * FROM `$dbtable` WHERE `md5`='$md5' AND `ptime` > DATE_SUB(NOW(),INTERVAL $DownloadLinkAvailableTime HOUR);"; - $mysql_query = mysqli_query($conn, $sql); - } - if (USING_DB and $result = mysqli_fetch_assoc($mysql_query)) { - $realLink = $result["realLink"]; - $usingcache = true; - } else { +if (USING_DB) { + connectdb(); - // 判断今天内是否获取过文件 - if (USING_DB and !$isipwhite) { // 白名单和小文件跳过 - // 获取解析次数 - $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; - } + $DownloadLinkAvailableTime = (is_int(DownloadLinkAvailableTime)) ? DownloadLinkAvailableTime : 8; + // 查询数据库中是否存在已经保存的数据 + $sql = "SELECT * FROM `$dbtable` WHERE `md5`='$md5' AND `ptime` > DATE_SUB(NOW(),INTERVAL $DownloadLinkAvailableTime HOUR);"; + $mysql_query = mysqli_query($conn, $sql); +} +if (USING_DB and $result = mysqli_fetch_assoc($mysql_query)) { + $realLink = $result["realLink"]; + $usingcache = true; +} else { + + // 判断今天内是否获取过文件 + if (USING_DB and !$isipwhite) { // 白名单和小文件跳过 + // 获取解析次数 + $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; } + } - $DBSVIP = GetDBBDUSS(); - $SVIP_BDUSS = $DBSVIP[0]; - $id = $DBSVIP[1]; + $DBSVIP = GetDBBDUSS(); + $SVIP_BDUSS = $DBSVIP[0]; + $id = $DBSVIP[1]; - // 开始获取真实链接 - $headerArray = array('User-Agent: LogStatistic', 'Cookie: BDUSS=' . $SVIP_BDUSS . ';'); // 仅此处用到SVIPBDUSS + // 开始获取真实链接 + $headerArray = array('User-Agent: LogStatistic', 'Cookie: BDUSS=' . $SVIP_BDUSS . ';'); // 仅此处用到SVIPBDUSS - $getRealLink = head($dlink, $headerArray); // 禁止重定向 - $getRealLink = strstr($getRealLink, "Location"); - $getRealLink = substr($getRealLink, 10); - $realLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// - $usingcache = false; + $getRealLink = head($dlink, $headerArray); // 禁止重定向 + $getRealLink = strstr($getRealLink, "Location"); + $getRealLink = substr($getRealLink, 10); + $realLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// + $usingcache = false; - switch (SVIPSwitchMod) { - case 1: - //模式1:用到废为止 - case 2: - //模式2:轮番上 - if ($id != "-1" and (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账号自动切换成功,对用户界面进行刷新进行重新获取 - $Language = Language; - echo "
+ switch (SVIPSwitchMod) { + case 1: + //模式1:用到废为止 + case 2: + //模式2:轮番上 + if ($id != "-1" and (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账号自动切换成功,对用户界面进行刷新进行重新获取 + $Language = Language; + echo "
{$Language["SwitchWait"]}
@@ -130,154 +141,142 @@ "; - exit; - } else { - // SVIP账号自动切换失败 - dl_error("SVIP账号切换失败", "数据库出现问题,无法切换SVIP账号,请联系站长修复", true); - exit; - } + exit; + } else { + // SVIP账号自动切换失败 + dl_error("SVIP账号切换失败", "数据库出现问题,无法切换SVIP账号,请联系站长修复", true); + exit; } - break; - case 3: - //模式3:手动切换,不管限速 - case 4: - //模式4:轮番上(无视限速) - case 0: - //模式0:使用本地解析 - default: - break; - } + } + break; + case 3: + //模式3:手动切换,不管限速 + case 4: + //模式4:轮番上(无视限速) + case 0: + //模式0:使用本地解析 + default: + break; } +} - // 1. 使用 dlink 下载文件 2. dlink 有效期为8小时 3. 必需要设置 User-Agent 字段 4. dlink 存在 HTTP 302 跳转 - if ($realLink == "") echo '
'; // 未配置 SVIP 账号 - else { +// 1. 使用 dlink 下载文件 2. dlink 有效期为8小时 3. 必需要设置 User-Agent 字段 4. dlink 存在 HTTP 302 跳转 +if ($realLink == "") echo '
'; // 未配置 SVIP 账号 +else { - // 记录下使用者ip,下次进入时提示 - if (USING_DB and !$usingcache) { - $ptime = date("Y-m-d H:i:s"); - $Sqlfilename = htmlspecialchars($filename, ENT_QUOTES); // 防止出现一些刁钻的文件名无法处理 - $Sqlpath = htmlspecialchars($path, ENT_QUOTES); - $sql = "INSERT INTO `$dbtable`(`userip`, `filename`, `size`, `md5`, `path`, `server_ctime`, `realLink` , `ptime`,`paccount`) VALUES ('$ip','$Sqlfilename','$size','$md5','$Sqlpath','$server_ctime','$realLink','$ptime','$id')"; - $mysql_query = mysqli_query($conn, $sql); - if ($mysql_query == false) { - // 保存错误 - dl_error(Language["DatabaseError"], "数据库错误,请联系站长修复。"); - exit; - } + // 记录下使用者ip,下次进入时提示 + if (USING_DB and !$usingcache) { + $ptime = date("Y-m-d H:i:s"); + $Sqlfilename = htmlspecialchars($filename, ENT_QUOTES); // 防止出现一些刁钻的文件名无法处理 + $Sqlpath = htmlspecialchars($path, ENT_QUOTES); + $sql = "INSERT INTO `$dbtable`(`userip`, `filename`, `size`, `md5`, `path`, `server_ctime`, `realLink` , `ptime`,`paccount`) VALUES ('$ip','$Sqlfilename','$size','$md5','$Sqlpath','$server_ctime','$realLink','$ptime','$id')"; + $mysql_query = mysqli_query($conn, $sql); + if ($mysql_query == false) { + // 保存错误 + dl_error(Language["DatabaseError"], "数据库错误,请联系站长修复。"); + exit; } + } ?> -
-
-