人人店上使用七牛云

由于服务器带宽问题,客户的人人店分销系统加载图片的速度一直非常的慢,系统虽然自带阿里云OSS和七牛云存储的功能,但是用的时候却有诸多问题。

1.在”系统选项”->”附件设置”下配置好”远程附件”中的七牛云相关信息后,页面返回为空白的问题。

这个问题是因在framework/model/attachment.mod.php中第30行,系统根据配置上传一个文件用于测试相关参数是否正确设置,而上传的这个本地文件不存在导致的,把这个*.ico文件改为一个本地存在的文件就好。

2.如果选用七牛云华南区的服务器,则配置无法通过上传测试的问题。

由于人人店系统版本的原因,可能选用的七牛云的SDK版本较旧(我们使用的系统上为7.0.6版),一些老版本的SDK是不包含华南等之后增加的服务器处理逻辑的,这里要给七牛云的SDK工程师一个差评,难道没想过公司会做大吗?低级错误。这个问题的解决只需要下载最新的七牛云SDK,并解压到framework/library下,取代原有的qiniu文件夹就好。

3.一切都配置成功了,似乎原有的商城仍旧没有使用相关配置的问题。

人人店有双重设置,这里需要进到相应公众号下的人人店管理系统中,在右上角的”系统设置”中,编辑组件信息,先启用七牛存储组件,然后在”公众号权限”中找到要授权七牛云存储的公众号并赋予七牛存储的组件使用权。最后,在上方的”数据”栏目里,就可以看到”七牛存储”的工具了,把之前的配置信息再在这里设置一遍就好了。注意,这里旧版的人人店系统会有存储区域选项,而且里面会只有华东和华北两个地区,由于我们已经更新了相关的七牛SDK,并且我们检查了新的SDK中的服务器选择代码,确认这个参数的传入是不会影响新的SDK的行为的,所以这里我们不用去选择他,新的SDK会根据我们的参数自动选择相应的服务器区域。

这一步配置好后,人人店往后新增的图片就都是使用的七牛云存储的相关空间了。如果之前系统已经有使用过,并且上传过一些图片资源的话,这个时候系统实际上在使用两套图片逻辑,既存量的图片将使用本地attachment目录下的文件,而增量的新图片将使用七牛云存储中的图片,并且增删改查都是这两套逻辑。

4.平滑迁移旧图片到七牛云

系统建议说直接将attachment文件夹上传到七牛云,当然,这是一种迁移的办法,如果想平滑迁移,可以使用七牛云的镜像存储功能,但是其使用文档写得有些错误,比如文档中说,要使用镜像存储,要求之前系统中的图片必须有一个单独的域名,这一点实际是错误的。人人店系统并没有给图片数据设置单独域名的功能,这里我们找到了一个解决方法,实际上只要原系统的图片都放在同一个目录下,并且使用src引用时都是用某个变量或者逻辑控制绝对地址,都可以比较方便的修改。(如果是相对地址或者绝对地址是写死到每一个src,需要对所有文件进行正则替换,替换成七牛中配置的新地址)

首先,在七牛云的镜像存储中设置好镜像源,直接使用原系统的图片目录地址就好,人人店的类似这样:http://www.yourdomain.com/attachment/,如果有多个目录,则可能需要建立多个存储空间,设立多个镜像存储。

然后,我们替换整个系统的图片地址头,在data/config.php文件中,我们并未找到相应的域名头配置变量,但是我们找到了$config[‘upload’][‘attachdir’] = ‘attachment’;,这说明,系统确实可以对图片的本地目录做统一的配置,进一步,全局搜索attachdir关键字,在framework/function/global.func.php下的第453行,找到了相应的设置,

TIM图片20170716160731

这个就是人人店系统对图片地址的控制逻辑,可以看到它有检查一个文件是否在本地存在,如果存在就会返回本地的链接,如果不存在,则会返回$_W[‘attachurl_remote’] . $src,这里我们猜测$_W[‘attachurl_remote’] 就是我们配置的七牛云的URL。

这里实现平滑迁移的方式很简单,将这一整段逻辑注释掉,直接使用七牛云的地址,即要求系统强制访问七牛云的空间,由于镜像存储的逻辑是,如果七牛空间没有图片,则到之前配置的镜像源下载图片到七牛云的空间,所以,将上面那段代码直接换成这样就好:$src = ‘你绑定使用的七牛云域名’ . $src;

设置好以后,不论是在前台的微信端,还是后台的管理端,人人店系统统一都会调用七牛云的资源了,每个资源被访问一次,就会被自动掉入到七牛云中,之后再访问就速度超快了。

最后,关于这个小技巧的一点思考,如果希望用户上传的新图片,都先在本地存一份,然后在七牛云也存一份,以保证系统可以不依赖七牛云运行,可以不对系统进行七牛的配置,只是更改第四个问题中的代码,这样,文件的上传实际上就到了本地(增删改查都将都是对本地的文件和数据库进行操作),但是读取的时候就被镜像存储功能自动拉到了七牛云,这样设置的话,有一个问题,就是无法删除掉七牛云上的文件,七牛云上的文件会越来越多,不过带来的好处就是可以随时切断客户的七牛云服务,或者更换对象存储服务商,方法就是把第四步的代码还原,或者切换到其他对象存储服务商的服务器即可(进一步的思考是,可以在这里加控制逻辑,根据不同服务商的收费方式或者负载能力,自动选择不同的对象存储服务商)。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注