Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
ZhaoYaGoo opened this issue Nov 4, 2018 · 14 comments
Closed

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

ZhaoYaGoo opened this issue Nov 4, 2018 · 14 comments

Comments

@ZhaoYaGoo
Copy link

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

@yiichou
Copy link
Owner

yiichou commented Nov 5, 2018

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

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

@yiichou
Copy link
Owner

yiichou commented Nov 5, 2018

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

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

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

ZhaoYaGoo commented Nov 5, 2018

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

@yiichou
Copy link
Owner

yiichou commented Nov 5, 2018

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

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

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

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

@ZhaoYaGoo
Copy link
Author

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

@yiichou
Copy link
Owner

yiichou commented Nov 6, 2018

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

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

@yiichou
Copy link
Owner

yiichou commented Nov 7, 2018

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

@yiichou
Copy link
Owner

yiichou commented Nov 7, 2018

3.2.4 done~

@yiichou yiichou closed this as completed Nov 7, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants