一、简介
oneindex(Onedrive Directory Index)是 donwa 大神开发的一款 OneDrive for Business 网盘前端客户端程序,利用 PHP 和 API 直接列出 OneDrive 的目录和文件,下载走 OneDrive 直链,不用服务器空间,不耗服务器流量,小鸡鸡变大盘鸡。
功能:
- 响应式,支持小屏设备
- 视频、音乐在线播放
- 图片在线预览
- 代码在线查看
- 支持文件夹加密
- 支持自定义头部、底部显示
- 支持文件上传
- 不断更新中......
二、安装
2018/06/28 更新
以下操作基于 OneIndex 2.0 版本(18/05/06),新版已优化安装注册流程,并支持个人账户,参照下图操作即可,出现问题可参考 6、排错:
1、依赖
- PHP5.6+,并开启 curl 功能;
- OneDrive for Business 账号;
注:OneDrive for Business 企业版和教育版均支持,账号需是管理员(不是管理员也可以,但至少要有创建 API 的权限,否则无法绑定)。
2、安装
创建站点后(以 http://example.com 为例),SHELL 进入到网站根目录,如 /var/www/html/,下载 OneIndex 源码:
# cd /var/www/html/
# git clone https://github.com/donwa/oneindex.git
Cloning into 'oneindex'...
remote: Counting objects: 222, done.
remote: Compressing objects: 100% (126/126), done.
remote: Total 222 (delta 117), reused 188 (delta 87), pack-reused 0
Receiving objects: 100% (222/222), 51.07 KiB | 25.00 KiB/s, done.
Resolving deltas: 100% (117/117), done.
# mv oneindex/.git ./ && rm -rf oneindex
# git reset --hard
设置权限(必须 777,不能 755):
# chown -R www:www *
# chmod 777 config config/base.php cache
2018/04/24 更新:
若要实现形如 https://example.com/images/1.jpg 的显示效果,网站需要添加重写规则。
Nginx 后端参考:
location / {
try_files $uri $uri/ /index.php/$uri;
}
3、获取 OneDrive API
登录 Azure Active Directory 管理,注册新应用程序:
输入名称,如:OneDrive for Linux,应用程序类型选择 Web 应用/API,登录 URL 输入:
https://login.microsoftonline.com/,然后创建:
记录应用程序 ID 备用:
如果创建后关闭了,在应用注册页面没找到应用,那么在应用注册页面筛选条件选 我的应用 就可以看到了:
点击应用左上角设置,将右侧的回复 URL 修改为: https://onedrive.live.com/about/business/:
点击所需权限 - Windows Azure Active Directory ,确认是否已选中 Sign in and user profile,如果没有则选中并点击完成:
然后添加权限,API 选择 Office 365 SharePoint Online,启用访问权限勾选 Read user files 和 Read and write user files,点击完成授权:
点击密钥,填入密钥描述,如:OneDrive,持续时间选择年限 1 年(超过可能会出现异常),保存,然后记录密钥值备用:
4、配置绑定
编辑 config/base.php,client_id、client_secret 和 redirect_uri 分别改成上个步骤中记录的 应用程序 ID、密钥值、回复 URL:
# vim config/base.php
<?php return array (
'client_id' => '应用程序 ID',
'client_secret' => '密钥值',
'redirect_uri' => '回复 URL',
'onedrive_root'=> '', //onedrive中要共享的目录,默认为根目录,可以改成如: /share
'cache_type'=> 'file',//sqlite 需要pdo 支持
'cache_expire_time' => 3600,
'cache_refresh_time' => 600,
'root_path' => '?'
);
其他参数依需求改动。
保存后打开网站 http://example.com/?/install,自动跳转到绑定页面,点击绑定账户:
登录后同意授权,同意后自动跳转到 Onedrive 首页,记录下 URL 中 code 后面 & 前面的一串字符串:
打开 http://example.com/?/install&code=刚记录的code,自动完成绑定后跳转到首页,显示 OneDrive 文件(首次可能不显示任何文件,待缓存自动刷新后即可看到),到此安装配置结束,点击文件下载也将自动获取 OneDrive 直链,不消耗主机流量(顶多列出清单的流量):
注:此示例样式已做过修改。
5、其他配置
① 去掉链接中的 ?
将 config/base.php 中的 'root_path' => '?'
改为 'root_path' => ''
。
② 设置缓存模式为 sqlite
将 config/base.php 中的 'cache_type'=> 'file'
改为 'cache_type'=> 'sqlite'
。
③ 自定义页面显示
整体布局:按 html 语法修改 view/layout.php 文件;
在文件夹头部添加说明: 在 onedrive 的文件夹中添加 HEAD.md 文件,使用 Markdown 语法;
在文件夹底部添加说明:在 onedrive 的文件夹中添加 README.md 文件,使用 Markdown 语法。
④ 加密文件夹
在onedrive的文件夹中添加.password文件,填入密码,密码不能为空。
⑤ 图片引用大小设置
比如图片: http://xn.tn/bg.jpg ,设置大图可以这样:http://xn.tn/bg.jpg?thumbnails=large
支持尺寸:
大|中|小
thumbnails=large|medium|small
上述设置新版无效,大佬给出更新如下:
http://xn.tn/bg.jpg?t=宽度|高度
也可以直接在引用处设置 style,如:
<img src="http://xn.tn/bg.jpg" style="width:50%;">
⑥ 上传、清除缓存等命令行功能
仅能在 php cli 模式下运行:
清除缓存
php one.php cache:clear
刷新缓存
php one.php cache:refresh
刷新令牌
php one.php token:refresh
上传文件
php one.php upload:file 本地文件 [onedrive文件]
例如:
//上传demo.zip 到onedrive 根目录
php one.php upload:file demo.zip
//上传demo.zip 到onedrive /test/目录
php one.php upload:file demo.zip /test/
//上传demo.zip 到onedrive /test/目录并命名为 d.zip
php one.php upload:file demo.zip /test/d.zip
6、排错
① 直链失效
据开发者测试 OneDrive 分享直连链接的流量在于 30~60G/h,次数在 1000 次左右,链接就会失效,可以修改 config/base.php 中的缓存时间,设成 60 秒或更短,但依网友测试,下载链接一旦变成热链修改缓存也无效,此为官方限制,无解。
② 无法获取 client_id、client_secret、code
参见上面的:4、配置绑定。
③ 新上传的文件没有显示
可尝试编辑配置文件 config/base.php,缩短缓存时间:
'cache_expire_time' => 300, //缓存过期时间,单位:秒
'cache_refresh_time' => 60, //缓存刷新时间,单位:秒
④ 绑定时提示“需要管理员批准”
绑定的账号需有管理权限,否则将无法绑定,这也是最开始说的 “,账号需是管理员(不是管理员也可以,但至少要有创建 API 的权限,否则无法绑定)”:
⑤ 获取 code 时提示“抱歉,登录时遇到问题”
配置文件 config/base.php 中的 redirect_uri 没有改成创建 API 时设置的回复 URL(要求严格一致):
⑥ 无法绑定,提示认证失败
这个问题主要出现在获得 code 后要绑定 OneIndex 时,正确的方法是在网址后面直接加 ?code=your code
,不能照抄上面教程,比如说,在获取 code 时,网址是:
http://example.com/?/install
那么获取 code 后应输入以下地址绑定:
http://example.com/?/install&code=********
如果伪静态先做好了才绑定,在获取 code 时的网址是:
http://example.com/
此时绑定的地址就应该是:
http://example.com/?code=********
⑦ 访问其他文件正常,但访问图片出现 404
出现此问题的原因是服务器软件(Nginx/Apache)接管了图片处理,删除配置中的类似下面的配置,重启软件即可:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log on;
}
⑧ 按步骤操作,但还是出现绑定失败的问题
尝试不要开启 SSL,删除 config/base.conf,重新绑定。
你可能还需要:《PyOne:支持世纪互联国内版和微软国际版的本地 OneDrive 文件浏览客户端详细部署教程》
参考文章:
1、《[NEW] OneDrive for Business in Linux》
2、《OneDrive for Business》
3、《GitHub:donwa/oneindex》
4、《OneIndex: 纯走 OneDrive 流量的网盘前端程序》
5、《[不限流量] 【php】【oneindex】小盘鸡假装大盘鸡做下载。onedrive增值服务》
Windows 10Chrome 64.0.3282.140来自 福建 的大神
作者 说是需要 onedrive business (教育或学校)帐号即可,没要求需要管理员帐号吧? 我这里是到获取 code 都是正常的, 就是绑定会有比较多的问题
因为需要创建 API,所以建议最好是管理员,括号里不是补充说明了“不是管理员也可以,但至少也要有创建 API 的权限”
Windows 10Chrome 64.0.3282.140来自 福建 的大神
回复 居然不能黏贴 。。。。! 作者的说法是 此office365必须有管理员! 顺便请问一下,你的后端服务器是apache 还是nginx ? 重写规则 用的是哪个?
避免垃圾评论~~
Nginx 后端,评论不能贴代码,我更新在文中了
Windows 10Chrome 66.0.3359.139来自 香港 的大神
认证失败……现在GitHub的代码已经添加了rewrite配置文件,伪静态应该就已经做好了吧?访问
绑定时页面就已经是http://example.com/了,
但按照这里的说法:
如果伪静态先做好了才绑定,在获取 code 时的网址是:
http://example.com/
此时绑定的地址就应该是:
http://example.com/?code=********
依然是认证失败。。。。
这就要具体分析了~
Windows 10Chrome 55.0.2883.87来自 德克萨斯 的大神
哥们儿用的宝塔面板吧?检测base.php的权限,是不是root,是root要换成www,我之前和你一样,现在改了就好了
Windows 7Chrome 65.0.3325.181来自 福建 的大神
按教程部署成功了,谢谢!
Windows 10Chrome 65.0.3325.162来自 河北 的大神
能不能改配色啊。怎么改。还有头部那个One怎么改成别的。求教 OωO
可以,修改 /view/material/layout.php 文件
Windows 10Chrome 66.0.3359.181来自 江苏 的大神
似乎location try_file那里会出错,个人找到的解决方法:https://stackoverflow.com/questions/19285355/nginx-403-error-directory-index-of-folder-is-forbidden
找了半天没找到nginx配置详情,贴上自己的:(记得装php-curl支持)
server {
listen 80;
server_name drive.example.com;
return 301 https://$host$request_uri;
}
server {
server_name drive.example.com;
root "/var/www/oneindex";
listen 443 ssl;
ssl on;
ssl_certificate /opt/nginx-1.12.2/ssl/*.example.com.cert.pem;
ssl_certificate_key /opt/nginx-1.12.2/ssl/*.example.com.key.pem;
client_max_body_size 10G;
location / {
try_files $uri /index.php/$uri;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(. ?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location = /.htaccess {
return 404;
}
}
Windows 10Chrome 66.0.3359.181来自 江苏 的大神
安装curl支持:apt install php7.0-curl
刚刚的配置有点问题,点了下一步没有用,working on it
lnmp 一键搞定 @~
Windows 10Chrome 67.0.3396.99来自 香港 的大神
博主请问搭建好了目录是空的怎么回事,重建了缓存也没变化
你是用了新版了吧,新版要等待一会儿才会刷新出来文件