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