简介:这是一款基于PHP开发的百度网盘目录列表与高速下载站程序,面向站长、PHP开发者以及需要把百度网盘资源转化为稳定下载链接的用户。程序本身不存储文件,而是通过百度网盘官方接口实现数据对接,可快速搭建类似蓝奏云或高速下载站的前端页面,配置方式灵活,支持免App与内置App两种模式,降低部署门槛。压缩包含374个文件,以PHP源码为核心,辅以Bootstrap相关样式、HTML模板、JavaScript脚本、字体图标及配置文件,整体仅3.77MB,轻量易部署,可在支持PHP7及以上、开启curl和zip扩展的虚拟主机或服务器上运行。程序内置目录树生成、授权系统等能力,既适合个人使用,也可为控制台或Web程序提供快速授权,满足二次开发需求。目前已有288人学习下载,适合希望掌握百度网盘API对接、目录树生成、授权系统设计以及自建高速下载站的开发者参考学习;其中完整的前端资源与源码结构也有助于快速理解程序逻辑并二次开发。 直接进入正题,聊聊这个 BP3 百度网盘目录列表程序。做个人资源站、素材分享站、内部分发工具的朋友,八成遇到过同一个痛点:东西塞在百度网盘里,发给别人只能甩链接,对方打开还要从一堆文件里翻半天,既没条理也显得不够专业。BP3 这种 PHP 开源程序解决的就是这件事——把你的百度网盘变成一个带目录导航的在线文件列表页,访客打开就能像逛网盘主页一样,一层层点进目录,找到文件后直接跳转百度网盘下载。
先说说适合谁。手上有 PHP 虚拟主机或者一台低配云服务器的人,想给自己存储的文件做个好看的展示页,又不想花钱买对象存储和云服务器带宽,BP3 是相当稳的选择。它本身不存文件,所有数据都通过百度网盘开放 API 实时拉取,服务器占用的磁盘空间几乎可以忽略,对机器配置的要求低到尘埃里。接下来我把这套程序的原理、部署、配置和踩坑记录完整拆开,按我自己的实操流程一步步讲。
1. BP3 核心机制:不存文件的目录站是怎么跑起来的
1.1 一句话拆解它干了什么
很多第一次接触的人会误以为 BP3 是把百度网盘文件“搬”到了自己服务器上,其实它只是个“搬运展示层”。程序的全部工作流程可以概括为三步:通过百度网盘开放平台的接口凭证,拿到你指定网盘目录下的文件结构,把这份结构渲染成网页目录,用户点击某个文件时程序再生成一个附带了下载参数的跳转链接,把人引到百度网盘的真实下载页。
整个链路里,你的服务器只做了一件事——转发请求和处理缓存。文件数据全程留在百度网盘侧,不占用你的主机流量和空间。这也是我推荐它作为低成本资源站方案的最根本原因:物理上不需要存储,逻辑上只需要维护一个目录配置。
1.2 为什么选择 BP3 而不是自己写接口
老实说,百度网盘的 API 并不复杂,按文档拉一个文件列表的接口半天就能调通。但自己写会遇到几个特别烦的问题:token 过期续期要处理、目录层级要自己维护面包屑导航、列表接口的字段要自己拼 UI、跨设备访问还要考虑缓存怎么刷。BP3 把这些通通做完了,你只需要填配置。
另一个关键点在“安全隔离”。程序只调用了“列出文件”和“生成下载链接”两类最小权限的接口,没有把整个网盘的管理权限暴露出去。你分享出去的是某个目录的只读视图,而不是整个网盘的入口。对于做资源分享、素材分发的场景,这种最小暴露面的设计是非常省心的。
1.3 整套程序的工程结构
我在实际部署后看了下源码目录,整体是典型的轻量 PHP 应用结构,没有引入重型框架,这也意味着你不需要装 composer 依赖、不需要 redis、不需要 node,传统虚拟主机就能跑。目录大概如下:
index.php:入口文件,负责接收请求并路由分发。config.php:核心配置文件,记录百度 API 的 key、密钥、网盘目录 ID。cache/:缓存目录,保存接口返回的文件列表 JSON 数据,避免每次访问都请求百度接口被限流。templates/:主题模板目录,列表页、错误页的 HTML 模板都在这里。lib/:核心类库,包含百度 API 调用、缓存读写、下载跳转的封装。
这种“入口+配置+缓存+模板”的四层结构,做二次开发也简单:改展示效果动 templates,改接口逻辑动 lib,几乎不需要理解复杂框架就能上手。
2. 环境准备与部署:从零到能打开页面
2.1 对服务器和 PHP 环境的真实要求
官方写的环境要求比较笼统,我按实际测试给你一个更明确的参考线:
- PHP 版本:7.2 以上。程序本身用到了一些 PHP 7 才有的语法特性,在 5.6 上跑会直接白屏。如果你还在用老虚拟主机,先确认面板里能不能切 PHP 版本。
- Web 服务器:Apache 或 Nginx 均可。Apache 下需要开启 mod_rewrite,Nginx 下需要配置伪静态规则。虚拟主机用户一般默认已经开启,自己买 VPS 的朋友记得装好 rewrite 模块。
- PHP 扩展:必须开启 curl 扩展,这是程序请求百度 API 的通道。另外需要 openssl 扩展,用于 HTTPS 访问。这两个在主流面板(宝塔、WDCP 等)默认都是开启的,命令行环境需要手动装一下。
注意:程序不需要 MySQL,文件的目录结构全部以 JSON 缓存形式存在磁盘上,所以数据库这步直接跳过。
2.2 部署五步流程
第一步,下载源码。BP3 的开源包在 GitHub 和码云上都有仓库,搜“BP3 百度网盘目录列表”即可找到。下载压缩包,解压后你会看到上一节里提到的那些目录和文件。
第二步,上传服务器。用 FTP 或者面板的文件管理器,把整个目录传到网站根目录下。如果你只想在一个子路径里跑,比如https://yourdomain.com/pan/,直接把文件放在pan目录下即可,程序会根据访问路径自动适配。
第三步,设置缓存目录权限。把cache/目录的权限设置为 755 或 775,确保 PHP 进程能写入。如果权限不够,后续访问会提示缓存写入失败。
第四步,配置伪静态。这一步的作用是让形如/pan/dir/123这样的地址能正确路由到程序入口,而不是报 404。Apache 环境,在根目录的.htaccess里写入规则:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L]Nginx 环境,在 server 或 location 块里添加:
location / { try_files $uri $uri/ /index.php?$query_string; }第五步,打开安装引导。访问你的域名地址,程序会自动检测环境并跳转到安装页面。安装向导里会要求填写百度 API 的配置信息和要展示的网盘目录 ID。这里先停在安装页,下一步我们把百度侧的准备做完,再回来填表。
3. 百度 API 接入与核心配置:最容易卡住的环节
3.1 申请百度开放平台应用
BP3 依赖百度网盘开放接口,所以必须先到百度开放平台注册一个“应用”。流程如下:
打开百度开发者中心,登录百度账号后进控制台,选择“创建应用”。应用类型选“软件”,操作系统选“Windows”或“Linux”不影响使用。创建成功后,你会拿到两个关键参数:API Key 和 Secret Key。这两个值就是接入凭证。
接下来最重要的一步:配置“回调地址”。这个地址决定了授权完成后百度把你重定向回哪个页面。BP3 的授权回调一般指向你站点的oauth.php或安装页内自带的授权节点。例如你的站点是https://yourdomain.com/pan/,回调地址就填https://yourdomain.com/pan/(具体以程序安装向导提示的参数名为准)。
3.2 获取网盘目录 ID 的两种方法
百度网盘 API 要求的目录参数不是存储路径的字符串(如/apps/我的分享),而是一个数字 ID。获取方式有两种:
一种是手动法:在浏览器里登录百度网盘的网页版,进入你想展示的那个文件夹,地址栏会变化,文件夹的 ID 就藏在 URL 里。比如 URL 末尾的数字就是目录 ID。
另一种是程序自动获取:BP3 的安装向导里通常带一个“获取列表”的调试按钮,填好 API Key 和 Secret Key 后,点击测试就会拉取网盘根目录下的文件夹列表并显示对应的 ID。这个方法最简单,推荐优先用它。
3.3 授权流程与 access_token 的管理
配置全部填好后,点击安装程序里的授权按钮,浏览器会跳到百度登录页,确认授权后跳回你的站点,程序自动在后台保存 access_token。
这里有个坑必须提醒:百度网盘开放接口的 access_token 有效期一般是 30 天。过期后,你的目录列表会变成空白或者报 401 错误。BP3 自带了一个刷新机制——只要配置了正确的 API Key 和 Secret Key,程序在检测到 token 失效时会尝试用 refresh_token 自动换取新的 token。但前提是,你必须保留下config.php中refresh_token字段的值,别手滑清掉。
我自己的习惯是在手机上设置一个每月倒数后提醒,到时间了就访问一次站点首页,如果列表正常就表示自动刷新成功,如果空白就进入后台重新授权。这个动作每 30 天做一次,基本能保证网站全年稳定。
3.4 config.php 关键配置项详解
打开配置文件,会看到一排常量定义。我挑几个最关键的说明一下:
| 配置项 | 含义 | 我的建议 |
|---|---|---|
BAIDU_API_KEY | 应用的 API Key | 从百度控制台复制 |
BAIDU_SECRET_KEY | 应用的 Secret Key | 从百度控制台复制 |
BAIDU_ROOT_DIR_ID | 展示的网盘根目录 ID | 填你想公开展示的那个文件夹 ID |
CACHE_EXPIRE | 缓存时间(秒) | 建议 1800 秒,防止接口被限流 |
IS_AUTH_ENABLE | 是否开启访问密码 | 内部分发建议开启 |
THEME_NAME | 启用的模板名 | 默认的简洁模板就很够用 |
特别注意BAIDU_ROOT_DIR_ID这个值。它决定了你网站展示的“根目录”是哪个文件夹。你可以把网盘根目录直接设为展示根目录,也可以只展示apps/公开分享这个子文件夹。我强烈建议只展示一个专门建好的子目录,不要开放整个网盘根目录,避免误把私密文件暴露出去。
4. 目录展示逻辑与缓存细节:核心性能与体验的关键
4.1 目录列表是怎么从接口到网页的
用户访问首页时,程序首先读取CACHE_EXPIRE时间内的缓存文件,如果在有效期内,直接读取缓存的 JSON 数据并渲染页面,不会请求百度接口。如果缓存过期,程序才会调用百度网盘的“文件列表”API,获取BAIDU_ROOT_DIR_ID目录下的第一层文件和文件夹列表,把结果写入缓存文件后渲染。
用户点进一个子目录时,同样的流程再来一遍:读取该目录 ID 的缓存,没有则去 API 拉取。这种按目录维度缓存数据的策略非常聪明——每次请求量很小,而且天然做到了一级目录、二级目录的缓存隔离,不会出现整个网站只用一个缓存文件导致互相覆盖的问题。
4.2 为什么必须开缓存:不单单是速度问题
很多人以为缓存是为了快,其实在百度网盘这个场景下,缓存更重要的是避免触发接口频控。百度开放平台的接口调用是有配额限制的,单个应用下每秒请求数控制在个位数级别,超了直接返回错误码。如果你的站突然被引了一波流量,同时几十个人打开不同目录,瞬间就会把配额打爆,页面直接全空白。开缓存后,绝大部分请求走了本地文件,只有缓存过期的那一瞬间会产生一两次真实的 API 调用,压力小非常多。
我在实际使用中把CACHE_EXPIRE设成 3600 秒(1 小时)。这样做的代价是网盘里新增的文件最长需要 1 小时才会在站点上显示,但对大部分资源分享场景来说完全可接受。如果你需要文件展示即时同步,可以设成 300 秒,但做好频控风险会上升一点的心理准备。
4.3 缓存手动清理的小技巧
如果你在网盘里刚上传了一个文件,想立刻在页面上看到效果,等缓存过期太着急。BP3 的缓存机制中,每个缓存文件是按照目录 ID 命名的,在cache/目录下找到对应 ID 的.json文件删掉即可强制刷新。也可以直接在后台设置里点“清空缓存”按钮。如果两个方法都没有,就去cache/目录看下文件结构,手动删掉对应文件,程序会自动重新拉取。
5. 常见问题排查与避坑手册:我从实践中总结的速查表
5.1 高频故障与解决方案
我把实际操作中遇到过的、以及论坛里问得最多的问题整理成一张表:
| 现象 | 原因 | 解决方案 |
|---|---|---|
| 首页打不开,白屏一片 | PHP 版本低于 7.2,或 curl 扩展未启用 | 切换 PHP 版本,开启 php-curl 扩展 |
| 列表区域空白,无任何报错 | access_token 失效 | 进入后台重新授权,或检查 refresh_token 是否存在 |
| 访问出现 404 | 伪静态规则未配置 | 按第 2.2 节配置 Apache 或 Nginx 规则 |
| 打开目录特别慢 | 缓存过期且百度接口响应慢 | 调大CACHE_EXPIRE,或错峰访问测试 |
| 下载按钮点了没反应 | 下载跳转链接生成失败 | 检查网盘文件是否支持分享,文件是否被和谐 |
| 页面正常但文件列表一直是旧的 | 缓存未过期 | 删除cache/目录下对应 ID 的缓存文件 |
5.2 两个长期维护层面的坑
第一个坑是网盘文件的“秒传”和“分享状态”。百度网盘对部分文件有审核机制,如果某个文件分享状态变为“分享失败”, BP3 生成的下载链接也会失效。这个你无法从程序侧解决,只能定期抽查网盘内的文件分享状态,把有问题的文件删掉或重新上传。
第二个坑是网站域名变化后的缓存问题。如果你的站点从 HTTP 切到 HTTPS,或者换了个域名,百度开放平台回调地址和程序的配置都要同步改,并且要重新授权一次。缓存目录里的旧数据不会有影响,但 token 会重新生成,旧的 refresh_token 就作废了。
5.3 我给新手的配置检查清单
安装完成后,建议你按以下顺序检查一遍,避免踩了坑还不知道问题出在哪:
- 用手机流量访问一次页面,确认目录能正常展示和跳转。
- 随便进一个二级子目录,确认面包屑导航可回退。
- 复制一个文件下载链到无痕浏览器里打开,确认访客视角下载正常。
- 在网盘里新增一个测试文件,验证缓存刷新逻辑是否符合预期。
- 检查访问日志里有没有大量 401 错误,有则立刻查 token 状态。
这套清单五分钟能走完,但能把 90% 的隐患提前拦住。
最后从实际维护角度说两句。BP3 这类的程序看起来小巧,部署半小时就能跑起来,但真正决定它能稳定跑多久的,往往是后端的 token 维护和缓存策略。我身边几个用同样思路搭资源站的朋友,大多数挂掉都不是因为程序本身,而是半年不看一眼 token,某天被访问者提醒才发现页面全空了。建议你把“每月 1 号检查一次站点”设成手机闹铃,顺手访问下首页看目录加载是否正常,再点进一个深层目录验证跳转,这个习惯能让你的小站一直保持健康状态。如果你后续有流量涨起来的打算,也可以基于这个项目做二次开发,比如给模板加上搜索框、对接统计代码、甚至接一层对象存储做下载加速,BP3 的代码结构留出的扩展空间是够用的。
本文还有配套的精品资源,点击获取