一、DISCUZX2.5/3/3.1云存储通用接口1.1.0beta版本[8.22最新更新]

链接地址:http://www.discuz.net/thread-3399569-1-1.html

本帖最后由 Luca. 于 2013-9-24 10:38 编辑

8.22
更新七牛云,20MB以内小附件测试通过

8.7
更新阿里云OSS,20MB以内小附件测试通过

云存储接口测试结果:
服务 图片 附件 批量上传 删除操作 大附件
又拍云 图片大于2M时间歇性失败 同左 同左 正常 未测
阿里云 对于10M左右大图上传正常 目前测试20M左右小附件,正常 正常 正常 未测
七牛云 对于10M左右大图上传正常 目前测试20M左右小附件,正常 正常 正常 未测

DiscuzX使用云存储原理:
我们通过改造ftp类,当附件上传到本地时再通过ftp类将附件上传到云存储上。

安装步骤:
1,到http://www.discuz.net/thread-3334048-1-1.html 下载最新框架并安装。
2,下载本附件,并上传到服务器。
3,到config_global.php添加配置信息:

$_config['extend']['storage']['curstorage'] = 'aliyun';
$_config['extend']['storage']['upyun']['bucket'] = 'dztest';
$_config['extend']['storage']['upyun']['username'] = 'dzuser';
$_config['extend']['storage']['upyun']['password'] = 'discuz';
$_config['extend']['storage']['upyun']['attachurl'] = 'http://dztest.b0.upaiyun.com'; $_config['extend']['storage']['aliyun']['access_id'] = '';
$_config['extend']['storage']['aliyun']['access_key'] = '';
$_config['extend']['storage']['aliyun']['access_host'] = NULL;
$_config['extend']['storage']['aliyun']['bucket'] = 'discuzbucket';
$_config['extend']['storage']['aliyun']['attachurl'] = 'http://discuzbucket.oss.aliyuncs.com'; $_config['extend']['storage']['qiniu']['accesskey'] = '';
$_config['extend']['storage']['qiniu']['secretkey'] = '';
$_config['extend']['storage']['qiniu']['attachurl'] = 'http://discuztest.qiniudn.com';
$_config['extend']['storage']['qiniu']['bucket'] = 'discuztest';

目前支持这四个云接口,第一行表示目前使用的云接口,一旦确认,不可再改。然后选择补充完对应的配置信息。

4,到后台的全局——上传设置——远程附件,选择打开,下面的信息可以随便填,或者按照一个正确的FTP服务器来填写,当没执行步骤3时,整个过程将按照一个正常FTP设置来运行。

5,上传附件并测试。

附件:http://7xsk7i.com1.z0.glb.clouddn.com/file/upload_cloudstorage1.1.0beta.zip

使用注意事项:1,本项测试目前只针对20MB以内小附件,对于大附件请等待以后版本新增的大附件异步上传支持脚本。
2,本服务我们只测试了常规情景下的上传动作,对于其他很多部分暂未测试,欢迎大家试用,并把问题及时反馈给我们以便我们及时修正。
3,本版本暂不支持多组服务器多个云存储同时共存,在使用前确认后不可再改,以后的版本可能会新增多个云存储多个bucket共存并向下兼容。

疑问解答:为什么不改造class_upload类而改造class_ftp类?
这个问题在发布至今一直有人问起,现统一作答。
由于discuz是一个复杂的程序,很多信息还依赖本地支持。比如上传后需要获取附件类型大小,图片附件需要获取尺寸信息,exif,是否为动画等信息并存入数据库。同时上传后的缩略图预览,缩略图生成,数据调用,feed生成等还都依赖本地,这也就决定了目前直接改造upload类会涉及到太大的工作量,直接上传到云存储并不是最好的方法。当然各位如果有兴趣可以自行研究下。

本云存储插件的完成和测试要感谢@myp4p的支持,还有七牛、阿里云官方团队的支持。

————————————————————————————————————————————————————————————————

二、DISCUZX2.5/X3/X3.1扩展框架DXEXTEND1.3.0版本发布[9.25升级X31重要提示]

链接地址:http://www.discuz.net/thread-3334048-1-1.html

本帖最后由 Luca. 于 2014-3-31 16:09 编辑

9.25 升级3.1提示:论坛2.5/3.0版本已经安装了框架的升级到最新版3.1的,请下载覆盖最新包并手动删除extend/class/class_cloud_ext.php文件

8.9更新到1.3.0beta
1,新增EXTEND_NO_DETECT常量,默认为false,会自动检测框架源文件更新情况。当更新各扩展的时候不需要再删除缓存文件。当功能稳定而不需要更新扩展的时候可以设置成true。

7.19更新到1.2.2beta
1,修复自定义常量失效

7.18更新到新版1.2beta
1,修复支持discuz_application类扩展

7.17更新到版本1.1.2beta
1,类名方法名大小写不敏感

7.16更新到版本1.1.1beta:
1,新增开关常量,在config文件里写$_config['extend']['innodb']['on'] = 1;用来代表开关,在系统中生成INNODB常量值为1.
2,新增文件依赖,即使启用缓存了也会优先保证extend文件夹的ext类存在才会执行。
3,新增云上报的类在extend文件夹里的映射,对应关系为:api/manyou 对应 extend/class/api/manyou

现有的插件机制是一种HOOK钩子机制,可以大致理解成是一种半路拦截的机制,在核心类实例化后运行runhooks(),在编译好的模板顶端运行hookscriptoutput()。这种方法虽然好用,但是当我们想修改一些核心类库的时候,就不是那么方便了。
比如当我们需要在table_forum_post类的fetch_all_prune_by_search方法里增加一个参数,让里面的搜索由sphinx来完成(举个例子,可行性暂不说)。
或者我们觉得mysql用来做计数不方便,要改用redis来统计的时候,我们不得不修改源码,其他似乎找不到可以不改源码的方法。
又比如我们论坛使用了云主机,不允许本地IO,我们需要把所有的附件传到另外一个提供了上传API的云服务器,我们还是不得不修改底层的upload类或者使用效率低下的FTP远程附件。

那么有没有不修改源码就能实现所有类扩展的方法呢?我们最近在进行一系列论坛优化方案的时候就遇到了这个问题,比如INNODB,redis分页,计划任务分离等都需要修改底层的类来实现。所以我们推出了适应于X25/X3的扩展框架。

扩展框架的目标:
我们可以在不修改任何源码的情况下,修改、新增source/class目录下所有的类文件。

扩展框架的原理:
我们通过修改论坛的自动加载机制,让他优先加载我们的扩展类,而扩展类均继承了需要扩展的父类。

安装和使用方法:
1,下载对应的文件包,覆盖到根目录,其实只修改了一个文件:class_core.php,我们在里面修改了自动加载机制。
2,在论坛下建立新的文件夹extend/class,而这个class里面的目录和文件列表均和source/class下的保持一致。
3,比如我们需要修改source/class/discuz/discuz_upload.php里面的类,把它的save,makedir等方法修改,则只需要在extend/class下建立一个discuz文件夹,再建立一个名为discuz_upload_ext.php的文件,这个表示这个类是扩展的。
4,在discuz_upload_ext.php文件里,我们对类discuz_upload进行修改,则只需要写一个类继承discuz_upload类。示例如下:

<?php

class discuz_upload_ext extends discuz_upload {
function save(){......}
}

这样你写的save方法就替代了论坛所有调用discuz_upload->save()的地方了,是不是很方便呢?

5,又比如,我们准备对table文件夹下的某个数据库操作的方法进行重写,类似,在extend/class下建立table文件夹,在里面建立比如table_forum_post_ext.php文件,然后写一个子类,class table_forum_post_ext extends table_forum_post{},在里面可以新增或者对已有的方法进行重载,这个会让整个论坛所有调用此方法都使用你修改后的方法。

文件目录列表:

注意事项:
1,关于子类的命名请严格按照上面说的方式来命名,否则不会被读取。
2,写代码时请尽量按照discuz的书写格式来写,比如不要使用短标签等。
3,在class_core定义了一个EXTEND_NO_CACHE常量,当生成缓存出现问题时可以打开强制更新缓存,当代码测试无误后请修改为false。新增EXTEND_NO_DETECT常量,可以自动检测扩展源文件变动而自动更新缓存,默认为false,即此功能生效。当功能趋于稳定后可以考虑设为true。
4,该框架可以实现source/class目录下所有类的重写,但是class_core文件里的除外,因为我们已经修改了。
5,由于历史原因,class目录下的类的构造函数有些是与类名相同,有些使用了__construct,子类如果需要调用父类的构造函数统一写成parent::__contruct()
6,由于历史原因,有些文件里有两个或多个类,我们也可以对其中的一个或者多个进行继承,方法如上面所述。

7,部分类使用了instance方法把实例保存到静态变量中来避免重复实例化,遇到这种类子类也应当存在此方法,否则实例化的是父类而导致子类中的方法均不生效。
8,其他插件更新的时候在1.3.0beta版本以下的必须要去data/sysdata文件夹下删除所有_ext结尾的文件,以便新插件生效

欢迎各位开发者试用,发现问题或者有更好的想法欢迎留言。
今后我们的各种性能扩展也基本会在此框架下运行。

X3.1  http://7xsk7i.com1.z0.glb.clouddn.com/file/upload_extend1.3.0_x3.1.zip

X3.0  http://7xsk7i.com1.z0.glb.clouddn.com/file/upload_extend1.3.0_x3.zip

X25  http://7xsk7i.com1.z0.glb.clouddn.com/file/upload_extend1.3.0_x25.zip

无编码版本区别,选择相应版本就行。
已经通过本框架完成的扩展列表:
DISCUZX3/X25论坛云上报/计划任务异步机制方案1.0beta
discuz-redis 扩展 轻松快速分页 避免分页瓶颈
Discuz! X2.5 / X3 InnoDB 补丁
DISCUZX2.5/X3帖子点击数缓存即时更新
DISCUZX2.5/3云存储通用接口
DISCUZ X2.5/X3/X3.1 SESSION机制优化扩展 1.0.1beta版

关于bin目录驻守进程脚本的开机启动配置
在扩展中我们有些脚本是需要一直在后台不间断运行的,比如session机制统计脚本,云上报异步脚本。
为了避免重启时任务丢失,我们需要在开机启动里加上这个脚本,大家可以参考如下设置。
1,进入/ect/rc.local
2,添加如下代码在最后:

cd /data/wwwroot/html/x3/extend/bin
nohup /usr/bin/php bin_session_cron.php > /data/wwwroot/html/x3/extend/bin/sessionlog 2> /data/wwwroot/html/x3/extend/bin/sessionlog2 &
nohup /usr/bin/php bin_async_cron.php > /data/wwwroot/html/x3/extend/bin/asynclog 2> /data/wwwroot/html/x3/extend/bin/asynclog2 &

大家记得把路径替换成自己网站的,php命令也得替换成自己的
3,云上报异步设置开机启动可能会出错,提示random函数不存在,这时需要在bin_async_cron.php中加入function_core文件中的random函数即可。

4,最后记得给bin目录设置700权限

Discuz x3.2七牛远程附件设置的更多相关文章

  1. 百度文本编辑器 Ueditor for net 使用七牛存储附件的实现

    百度编辑器功能强大,确实好用,可惜附件使用本地存储,如果网站的用户量巨大,则会使得网站目录变得非常庞大,而且文件不易于管理,七牛云存储在附件存储方面下了不少功夫,用起来感觉不错,要是将ueditor ...

  2. 利用七牛存储7天远程自动备份LINUX服务器

    受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间.我们折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件.从而只备份7份数据,不至于占用特别大的空间. 如 ...

  3. nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

    近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable ...

  4. 用WP Super Cache和七牛为你的WordPress网站加速

    众所周知,WordPress一直都是博客建站的首选程序,而现在也有越来越多的企业网站都选择采用WordPress来搭建. WordPress虽好但其过于臃肿且响应速度慢等缺点也为站长们所诟病,目前网上 ...

  5. discuz接入七牛sdk

    自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件   解释:就 ...

  6. Discuz X3.2 SEO设置 title 不支持空格的解决方法

    很多使用 Discuz X3.2 的同学都发现这么一个问题:在后台SEO设置-title设定的时候,即使你在连字符两侧输入了空格,在前台也显示不出来,很多同学纠结这个问题,今天终于找到了解决方法,在此 ...

  7. QiniuUpload- 一个方便用七牛做图床然后插入markdown的小工具

    最近一段时间有用markdown做笔记,其他都好,但是markdown插入图片挺麻烦的,特别是想截图之后直接插入的时候.需要首先把图片保存了,然后还要上传到一个地方生成链接才能插入.如果有个工具可以直 ...

  8. WordPress网站加速优化,一键免费使用七牛CDN插件

    利用wordpress搭建网站是个人建站的主流方案,我曾分享过wordpress网站加速优化必做的十件事,帮助了不少个人站长.今天介绍帮助wordpress网站提升速度至少10倍的免费CDN加速插件: ...

  9. Centos7 在apache+php7环境下 安装 Discuz!X3.4

    拉取Discuz!X3.4代码 git 地址 : https://gitee.com/ComsenzDiscuz/DiscuzX 在/var/www/html 中新建 bbs 文件夹 将git下upl ...

随机推荐

  1. hdu 5475 (线段树)

    An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  2. 【刷题】BZOJ 3514 Codechef MARCH14 GERALD07加强版

    Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...

  3. [CF850F] Rainbow Balls

    题目大意 这里 题解 我们枚举最后剩下的球的种类,那么其他球可以看做没用了. 设选定的球有\(a_i\)个,球的总数为\(s=\sum_{i=1}^n a_i\). 现在问题变为:在一个长度为\(s\ ...

  4. BZOJ 1014 火星人 | 平衡树维护哈希

    BZOJ 1014 火星人 题意 有一个字符串,三中操作:在某位置后面插入一个字符.修改某位置的字符.询问两个后缀的最长公共前缀. 题解 看到网上的dalao们都说这道题是平衡树,我就很懵x--平衡树 ...

  5. Java考试题之九

    QUESTION 177 Given: 1.     class TestException extends Exception { } 2.     class A { 3.     public ...

  6. linux Git版本控制学习与Git服务器搭建

    来源地址 要随时掌握工作区的状态,使用git status命令. 如果git status告诉你有文件被修改过,用git diff可以查看修改内容. 初始化一个Git仓库,使用git init命令. ...

  7. [case]filesystem problem

    e2fsck -Nov-) fsck.ext4: Superblock invalid, trying backup blocks... fsck.ext4: Bad magic number in ...

  8. python基础之02列表/元组/字典/set集合

    python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...

  9. CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And his Cake

    https://www.codechef.com/DEC17/problems/GIT01 #include<cstdio> #include<algorithm> using ...

  10. SQL语句(二十)—— 数据库安全性

    数据库安全性 1. SQL Server 配置管理器  => 网络配置 MSSQLSERVER 协议,如果应用程序和SQL Server 在同一机器上,仅使用 Shared Memory (共享 ...