部署 OneDrive for business (PHP)客户端程序 OneIndex 详细教程

一、简介

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 管理,注册新应用程序:

Regist.png

输入名称,如:OneDrive for Linux,应用程序类型选择 Web 应用/API,登录 URL 输入:
https://login.microsoftonline.com/,然后创建:

application.create.jpg

记录应用程序 ID 备用:

application.id.jpg

如果创建后关闭了,在应用注册页面没找到应用,那么在应用注册页面筛选条件选 我的应用 就可以看到了:

application.show.jpg

点击应用左上角设置,将右侧的回复 URL 修改为: https://onedrive.live.com/about/business/

application.set.jpg

replyurl.jpg

点击所需权限 - Windows Azure Active Directory ,确认是否已选中 Sign in and user profile,如果没有则选中并点击完成:

checkaccess.png

然后添加权限,API 选择 Office 365 SharePoint Online,启用访问权限勾选 Read user files 和 Read and write user files,点击完成授权:

permission.api.set.jpg

permission.api.jpg

permission.jpg

点击密钥,填入密钥描述,如:OneDrive,持续时间选择年限 1 年(超过可能会出现异常),保存,然后记录密钥值备用:

key.set.jpg

key.jpg

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,自动跳转到绑定页面,点击绑定账户:

Binding.png

登录后同意授权,同意后自动跳转到 Onedrive 首页,记录下 URL 中 code 后面 & 前面的一串字符串:

Binding.Success.png

打开 http://example.com/?/install&code=刚记录的code,自动完成绑定后跳转到首页,显示 OneDrive 文件(首次可能不显示任何文件,待缓存自动刷新后即可看到),到此安装配置结束,点击文件下载也将自动获取 OneDrive 直链,不消耗主机流量(顶多列出清单的流量):

Example.png

注:此示例样式已做过修改。

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 的权限,否则无法绑定)”:

Binding.Rejectpng.png

⑤ 获取 code 时提示“抱歉,登录时遇到问题”

配置文件 config/base.php 中的 redirect_uri 没有改成创建 API 时设置的回复 URL(要求严格一致):

Binding.Reject2.png

⑥ 无法绑定,提示认证失败

这个问题主要出现在获得 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增值服务


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 部署教程网盘onedrive客户端oneindexondrive 客户端 的文章

 本文最后更新于 2019/06/13 12:16:35,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 媒体 > 部署 OneDrive for business (PHP)客户端程序 OneIndex 详细教程

精选评论

  1. Ha

    博主请问搭建好了目录是空的怎么回事,重建了缓存也没变化

    1. 欧文斯

      你是用了新版了吧,新版要等待一会儿才会刷新出来文件

  2. 靓坤

    似乎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;
    }
    }

    1. 靓坤

      安装curl支持:apt install php7.0-curl
      刚刚的配置有点问题,点了下一步没有用,working on it

  3. river

    能不能改配色啊。怎么改。还有头部那个One怎么改成别的。求教 OωO

    1. 欧文斯

      可以,修改 /view/material/layout.php 文件

  4. Meco

    按教程部署成功了,谢谢!

  5. hyopo

    认证失败……现在GitHub的代码已经添加了rewrite配置文件,伪静态应该就已经做好了吧?访问
    绑定时页面就已经是http://example.com/了,
    但按照这里的说法:

    如果伪静态先做好了才绑定,在获取 code 时的网址是:

    http://example.com/
    此时绑定的地址就应该是:

    http://example.com/?code=********

    依然是认证失败。。。。

    1. hh

      哥们儿用的宝塔面板吧?检测base.php的权限,是不是root,是root要换成www,我之前和你一样,现在改了就好了

    2. 欧文斯
  6. Jays

    作者 说是需要 onedrive business (教育或学校)帐号即可,没要求需要管理员帐号吧? 我这里是到获取 code 都是正常的, 就是绑定会有比较多的问题

    1. 欧文斯

      因为需要创建 API,所以建议最好是管理员,括号里不是补充说明了“不是管理员也可以,但至少也要有创建 API 的权限”

      1. Jays

        回复 居然不能黏贴 。。。。! 作者的说法是 此office365必须有管理员! 顺便请问一下,你的后端服务器是apache 还是nginx ? 重写规则 用的是哪个?

        1. 欧文斯

          避免垃圾评论~~
          Nginx 后端,评论不能贴代码,我更新在文中了