yiichou / aliyun-oss-support

基于阿里云OSS的WordPress远程附件支持插件
Other
353 stars 80 forks source link

插件判断图片文件夹的替换太简单粗暴了吧? #80

Closed ZhaoYaGoo closed 5 years ago

ZhaoYaGoo commented 5 years ago

大概查看了下,我传图片的文件夹是upload,里面有系统默认的按年份和月份创建的文件夹。也有我其他插件创建的文件夹。处理图片很完美,但是替换路径太简单粗暴了,直接就把upload文件夹路径给换了,也不加个判断。导致了我其他插件放到里面的文件无法调用。例如Elementor插件,有一些CSS文件也是放在upload里面的。建议给加个选项,排查哪些文件夹路径不替换。我不会写插件,直接就修改了你的PHP文件,加了个判断。

yiichou commented 5 years ago

嗯 有道理 但是这个判断应该怎么写呢?不同插件有不同的逻辑,WordPress 的插件生态真的是千奇百怪的

如果有什么好的解决方案,你可以直接提 PR

yiichou commented 5 years ago

CSS文件 是你通过 Elementor 上传到 upload 里面的吗?

其实不止 Elementor,很多自带上传功能或远程下载功能的插件都存在这个问题,比如 ultimate member 这类插件没有使用系统的上传组件,所以插件没办法去 hook 它们的上传动作 而那些调用了系统组件的插件又能工作得很好,比如 BuddyPress

之前我已经在插件里面加入了三个自定义 filter/action,以满足一些定制化需求,但是对于广泛的兼容性处理,一直没有很好的方案,即使用白名单的方案,可能也会有网友来反馈『插件对部分(XXX插件上传的)文件不起作用』

ZhaoYaGoo commented 5 years ago

我目前直接就是在你的替换函数里面加一个判断,例如Elementor文件夹,判断如果地址字符串中包含这个文件夹,这句替换就不生效。建议可以在配置里面加一个类似于白名单的东西。

ZhaoYaGoo commented 5 years ago

才看到你已经考虑了白名单。在WINDOWS下有一个叫“映射驱动器”的做法,可以把网络地址映射为本地磁盘,就类似于直接操作磁盘这样。 LINUX 下我没试过,应该可以。 度娘了一下,有个类似的解决办法。 https://bbs.aliyun.com/read/233791.html?spm=a2c4e.11155515.0.0.39ba4da4srlcPE 都让,这只是针对阿里云的ESC。如果其他的目前没有想到。 看能不能把OSS想办法映射为一个本地磁盘。然后通过插件修改UPLOAD的地址到这个磁盘。

ZhaoYaGoo commented 5 years ago

方便的话留个联系方式,我们讨论下。插件什么的确实不想写,也懒得去研究。

ZhaoYaGoo commented 5 years ago

Elementor的CSS文件不是通过系统的上传的,没办法捕获。考虑其他插件,估计这种方式也不全部都用。抛开系统层面的解决办法,我目前也没想到好的解决办法。

ZhaoYaGoo commented 5 years ago

刚才看了下Elementor的设置。对于CSS文件,可以用包含在页面里面实现。杜绝了和你的插件不兼容的问题,但是这样的增大单个页面的大小,而且很多重复数据下载。所以这只是治标不治本的方法,还是要从根本解决。目前我想到的办法就只能是通过设置白名单,排查UPLOAD下面某个文件夹的文件不上传和在替换路径的时候不替换。

yiichou commented 5 years ago

我在高级选项里增加了一个新的 exclude 项,可以通过填入 正则表达式 达到排出指定目录、文件的效果,你可以先试用一下,看看有没有 bug

https://github.com/IvanChou/aliyun-oss-support/releases/tag/3.2.3

挂载磁盘的方式、或者是 OSS 设置回源的方式,其实都有考虑过,但是毕竟忙又懒

ZhaoYaGoo commented 5 years ago

测试了一下,有个小BUG,没去看源码。每次保存的时候Files To Exclude都会自动在专柜表达式中添加一个“\”。

ZhaoYaGoo commented 5 years ago

应该是转义的判断有问题。

ZhaoYaGoo commented 5 years ago

貌似所有地址都出问题了。3.2.2存储在OSS上的文件是按系统默认的“年/月/文件”的方式存储的。 这个版本地址替换后直接读取的是根目录下的文件。 原地址: https://myserver/web/2019/11/image.jpg 替换后地址: https://ossserver/web/image.jpg

yiichou commented 5 years ago

是的,我也发现了,写错了一个地方 重新下载一个 3.2.3 吧,已经修改替换了,但是没改版本号(我以为还没人下载~)

然后自动添加 「 \ 」的问题是什么情况,你的表达式是啥,我试试

yiichou commented 5 years ago

自动添加 「 \ 」的问题也复现了 😂

yiichou commented 5 years ago

3.2.4 done~