部署 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. Jays
    Jays 回复

    Windows 10Chrome 64.0.3282.140来自 福建 的大神

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

    1. 欧文斯

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

      1. Jays
        Jays 回复

        Windows 10Chrome 64.0.3282.140来自 福建 的大神

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

        1. 欧文斯

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

  2. hyopo
    hyopo 回复

    Windows 10Chrome 66.0.3359.139来自 香港 的大神

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

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

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

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

    依然是认证失败。。。。

    1. 欧文斯
    2. hh
      hh 回复

      Windows 10Chrome 55.0.2883.87来自 德克萨斯 的大神

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

  3. Meco
    Meco 回复

    Windows 7Chrome 65.0.3325.181来自 福建 的大神

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

  4. river
    river 回复

    Windows 10Chrome 65.0.3325.162来自 河北 的大神

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

    1. 欧文斯

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

  5. 靓坤
    靓坤 回复

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

    1. 靓坤
      靓坤 回复

      Windows 10Chrome 66.0.3359.181来自 江苏 的大神

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

  6. Ha
    Ha 回复

    Windows 10Chrome 67.0.3396.99来自 香港 的大神

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

    1. 欧文斯

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