diff --git a/README.md b/README.md index b372495b..2e73000e 100644 --- a/README.md +++ b/README.md @@ -24,23 +24,15 @@ PanDownload 网页复刻版,PHP 语言版
因站长学习紧张加上精力有限,演示站没有时间维护,故暂时关闭。 ## 🚧Blacklists -- https://pan.xiaoshuyun.cn/ 1.4.3版本 无密码 -- https://pan.qiafan.vip/ 1.4.5版本 无密码 - http://www.dupan.cc/ (恶意篡改后台并加密,站长QQ33703259) - - http://www.pojiewo.com/baidujx 1.4.2版本 注:此网站 **盗用** 其他网站的接口获取下载地址 -- https://202.61.130.143/ 1.4.2版本 -- http://59.110.124.211:9090/ 1.0版本 -- http://yunpan.aoti.xyz:81/ 1.4.2版本 -- https://pan.jwls.live/ 1.4.3版本 -- https://bd.pkqjsq.top/ 1.4.3版本 -- http://pan.0ddt.com/ 1.0版本 + + + - - 以上网站使用本项目源码,未与作者联系而删除作者信息。
版权信息可添加**Github项目地址**或**我个人主页地址**,内容可自定,但访客**必须可见**。
@@ -65,18 +57,28 @@ PanDownload 网页复刻版,PHP 语言版
# 🔧Install & Setting 首先Clone项目或进入[Releases](https://github.com/yuantuo666/baiduwp-php/releases)下载项目文件。
-然后访问 `install.php` 文件并填写相关信息。
+然后访问 `install.php` 文件并填写相关信息进行安装。
如果使用数据库,则需要先点击 `检查数据库连接` 连接数据库,保证账号密码正确。
-最后点击提交即可。 +最后点击提交即可。
+ +安装完成后可直接使用,站长可进入settings.php中进行相关设置。
+在**SVIP账号**中可设置**SVIP账号**的**BDUSS**和**STOKEN**,添加账号后记得进入**会员账号切换模式**将模式改成**顺序模式**或**轮换模式**。
## 📦New Changes -- 当前版本:`2.1.4` -- 更新日期:2021-03-28 +- 当前版本:`2.1.5` +- 更新日期:2021-04-03 - 修改内容: - 💥新增功能 - - 支持通过微信API获取50MB以下文件 + - 账号状态检查 + - Aria2在线管理页面 - ⚠错误修复 - - 修复由于百度网盘更新页面js代码引起的项目失效 + - 修复未开启数据库情况下无法正常获取文件下载地址 Thanks to kwxiaozhu + - 修复GetDir()支持PHP8 Thanks to zzjin + - 改用WebSocket推送下载链接到aria2 + - ♻代码优化 + - 增加账号失效提示 + - 版权信息改为Github项目页面 + - 删除不必要的版本检测和版本号 [查看更多](Update.md) diff --git a/Update.md b/Update.md index eadad772..72984935 100644 --- a/Update.md +++ b/Update.md @@ -1,4 +1,19 @@ # Update +### `2.1.5` 版本: +- 更新日期:2021-04-03 +- 修改内容: + - 💥新增功能 + - 账号状态检查 + - Aria2在线管理页面 + - ⚠错误修复 + - 修复未开启数据库情况下无法正常获取文件下载地址 Thanks to kwxiaozhu + - 修复GetDir()支持PHP8 Thanks to zzjin + - 改用WebSocket推送下载链接到aria2 + - ♻代码优化 + - 增加账号失效提示 + - 版权信息改为Github项目页面 + - 删除不必要的版本检测和版本号 + ### `2.1.4` 版本: - 更新日期:2021-03-28 - 修改内容: diff --git a/api.php b/api.php index 39bfb9d4..a500965e 100644 --- a/api.php +++ b/api.php @@ -10,7 +10,6 @@ * @link https://space.bilibili.com/88197958 * */ -$programVersion_API = '2.1.4'; session_start(); define('init', true); if (version_compare(PHP_VERSION, '7.0.0', '<')) { @@ -35,12 +34,6 @@ 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'); @@ -306,7 +299,9 @@ $DBPassword = (!empty($_POST["DBPassword"])) ? $_POST["DBPassword"] : ""; $dbname = (!empty($_POST["dbname"])) ? $_POST["dbname"] : ""; $dbtable = (!empty($_POST["dbtable"])) ? $_POST["dbtable"] : ""; - + if (!function_exists('mysqli_connect')) { + EchoInfo(-2, array("msg" => "
您未安装或未启用 mysqli 扩展,
不能使用数据库功能。
请自行关闭数据库功能。")); + } $conn = mysqli_connect($servername, $username, $DBPassword); $GLOBALS['conn'] = $conn; // Check connection diff --git a/functions.php b/functions.php index 1a38ed82..4a4f8bb8 100644 --- a/functions.php +++ b/functions.php @@ -12,7 +12,6 @@ * @link https://space.bilibili.com/88197958 * */ -$programVersion_Functions = '2.1.4'; if (!defined('init')) { // 直接访问处理程序 header('Content-Type: text/plain; charset=utf-8'); if (!file_exists('config.php')) { @@ -22,18 +21,12 @@ 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=./'); define('init', true); require('config.php'); - die("HTTP 403 禁止访问!\r\n此文件是 PanDownload 网页复刻版 PHP 语言版项目版本 " . programVersion . " 的有关文件!\r\n禁止直接访问!"); + die("HTTP 403 禁止访问!\r\n此文件是 PanDownload 网页复刻版 PHP 语言版项目的有关文件!\r\n禁止直接访问!"); } // main @@ -179,7 +172,13 @@ function getSign(string $surl, $randsk) echo '
【限制版】getSign():no match
'; var_dump(htmlspecialchars($result)); } - dl_error("根目录yunData获取失败", "页面未正常加载,或者百度已经升级页面,无法正常获取根目录yunData数据。"); + if (strstr($result, "Redirecting to") != false) { + // 账号BDUSS或STOKEN失效 + dl_error("普通账号失效", "可能由于配置问题或者是修改账号密码导致的普通账号失效,请重新获取BDUSS和STOKEN并设置到config.php中。"); + exit; + } else { + dl_error("根目录yunData获取失败", "页面未正常加载,或者百度已经升级页面,无法正常获取根目录yunData数据。"); + } return 1; } } @@ -463,3 +462,178 @@ function GetIPTablePage(string $page) } return $AllRow; } +/** + * 获取数据库中的BDUSS数据 + * + * @return array 返回BDUSS和对应id id=-1表示本地解析 + */ +function GetDBBDUSS() +{ + global $dbtable, $conn; + // 获取SVIP BDUSS + switch (SVIPSwitchMod) { + case 1: + //模式1:用到废为止 + // 时间倒序输出第一项未被限速账号 + $sql = "SELECT `id`,`svip_bduss`,`svip_stoken` 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"]; + $SVIP_STOKEN = $Result["svip_stoken"]; + $id = $Result["id"]; + } else { + // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + $SVIP_BDUSS = SVIP_BDUSS; + $SVIP_STOKEN = SVIP_STOKEN; + $id = "-1"; + } + break; + case 2: + //模式2:轮番上 + // 时间顺序输出第一项未被限速账号 + $sql = "SELECT `id`,`svip_bduss`,`svip_stoken` 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"]; + $SVIP_STOKEN = $Result["svip_stoken"]; + $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; + $SVIP_STOKEN = SVIP_STOKEN; + $id = "-1"; + } + break; + case 3: + //模式3:手动切换,不管限速 + // 时间倒序输出第一项账号,不管限速 + $sql = "SELECT `id`,`svip_bduss`,`svip_stoken` 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"]; + $SVIP_STOKEN = $Result["svip_stoken"]; + $id = $Result["id"]; + } else { + // 数据库中所有SVIP账号已经用完,启用本地SVIP账号 + $SVIP_BDUSS = SVIP_BDUSS; + $SVIP_STOKEN = SVIP_STOKEN; + $id = "-1"; + } + break; + case 0: + //模式0:使用本地解析 + default: + $SVIP_BDUSS = SVIP_BDUSS; + $SVIP_STOKEN = SVIP_STOKEN; + $id = "-1"; + break; + } + return [$SVIP_BDUSS, $id, $SVIP_STOKEN]; +} +/** + * 用于获取账号状态 + * + * @return array [errno,会员状态,用户名,登录状态,会员剩余时间] + */ +function AccountStatus(string $BDUSS, string $STOKEN) +{ + $Url = "https://pan.baidu.com/api/gettemplatevariable?channel=chunlei&web=1&app_id=250528&clienttype=0"; + $Header = [ + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36", + "Cookie: BDUSS=$BDUSS;STOKEN=$STOKEN;" + ]; + $Data = "fields=[%22username%22,%22loginstate%22,%22is_vip%22,%22is_svip%22,%22is_evip%22]"; + $Result = post($Url, $Data, $Header); + $Result = json_decode($Result, true); + if (DEBUG) { + echo '
账号状态:';
+        var_dump($Result);
+        echo '
'; + } + if ($Result["errno"] == 0) { + // 正常 + $Username = $Result["result"]["username"]; + $LoginStatus = $Result["result"]["loginstate"]; + if ($Result["result"]["is_vip"] == 1) { + $SVIP = 1; //会员账号 + } elseif ($Result["result"]["is_svip"] == 1 or $Result["result"]["is_evip"] == 1) { + $SVIP = 2; //超级会员账号 + } else { + $SVIP = 0; //普通账号 + return array(0, $SVIP, $Username, $LoginStatus, 0); + } + + $Url = "https://pan.baidu.com/rest/2.0/membership/user?channel=chunlei&web=1&app_id=250528&clienttype=0"; + $Header = [ + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36", + "Cookie: BDUSS=$BDUSS;STOKEN=$STOKEN;" + ]; + $Data = "method=query"; + $Result = post($Url, $Data, $Header); + $Result = json_decode($Result, true); + if (DEBUG) { + echo '
会员状态:';
+            var_dump($Result);
+            echo '
'; + } + if (isset($Result["reminder"]["svip"])) { + //存在会员信息 + $LeftSeconds = $Result["reminder"]["svip"]["leftseconds"]; + return array(0, $SVIP, $Username, $LoginStatus, $LeftSeconds); + } + } elseif ($Result["errno"] == -6) { + // 账号失效 + return array(-6); + } else { + //未知错误 + return array($Result["errno"]); + } +} +/** + * 时间差计算 + * + * @param Timestamp $time + * @return String Time Elapsed + * @author Shelley Shyan + * @copyright http://phparch.cn (Professional PHP Architecture) + */ +function time2Units(int $time) +{ + $year = floor($time / 60 / 60 / 24 / 365); + $time -= $year * 60 * 60 * 24 * 365; + $month = floor($time / 60 / 60 / 24 / 30); + $time -= $month * 60 * 60 * 24 * 30; + $day = floor($time / 60 / 60 / 24); + $time -= $day * 60 * 60 * 24; + $hour = floor($time / 60 / 60); + $time -= $hour * 60 * 60; + $minute = floor($time / 60); + $time -= $minute * 60; + $second = $time; + $elapse = ''; + + $unitArr = array( + '年' => 'year', '个月' => 'month', '天' => 'day', + '小时' => 'hour', '分钟' => 'minute', '秒' => 'second' + ); + + foreach ($unitArr as $cn => $u) { + if ($$u > 0) { + $elapse = $$u . $cn; + break; + } + } + + return $elapse; +} \ No newline at end of file diff --git a/index.php b/index.php index 971df416..dff54ddc 100644 --- a/index.php +++ b/index.php @@ -9,14 +9,14 @@ * * 此项目 GitHub 地址:https://github.com/yuantuo666/baiduwp-php * - * @version 2.1.4 + * @version 2.1.5 * * @author Yuan_Tuo * @link https://imwcr.cn/ * @link https://space.bilibili.com/88197958 * */ -$programVersion_Index = "2.1.4"; +$programVersion_Index = "2.1.5"; session_start(); define('init', true); if (version_compare(PHP_VERSION, '7.0.0', '<')) { @@ -135,7 +135,7 @@ function confirmdl(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, files - + @@ -195,7 +195,7 @@ function confirmdl(fs_id, timestamp, sign, randsk, share_id, uk, bdstoken, files } echo $filecontent . ""; - // exit; + // exit; } else { // 解析异常 $ErrorCode = $Filejson["errtype"]; @@ -399,70 +399,9 @@ function getip() } } - // 获取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"; - break; - } - - + $DBSVIP = GetDBBDUSS(); + $SVIP_BDUSS = $DBSVIP[0]; + $id = $DBSVIP[1]; // 开始获取真实链接 if ($smallfile) $headerArray = array('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36', 'Cookie: BDUSS=' . BDUSS . ';'); @@ -583,45 +522,53 @@ function getip() echo '

'; ?>

- 推送到Aria2 + 推送到Aria2

(必读)

-