使用WP Super Cache+CDN Sync Tool自动同步图片损坏的解决办法

今天终于把大家推荐的W3TC给换掉了,原因无他。消耗资源过多,并且效果不好。根据各种GOOGLE发现可以使用CDN Sync Tool+WP Super Cache来替代W3TC,在经过各种测试之后发现通过CDN Sync Tool自动同步到又拍云的图片全部都无法打开,把图片下载回本地发现无法打开,直接报错,如下图:

 

在使用Beyond CompareHA的16以16进制方式对文件进行对比后发现从又拍云中取回的文件比原始的多了一些0D并且比原始文件要稍微大一点。

根据各种GOOGLE之后得知,CDN Sync Tool使用的是FTP_ACSII方式对文件进行上传的。

 

ASCII模式
复制时候会进行调整,主要体现为对不同操作系统的回车/换行/结束符等进行转译。
比如,回车符号在Unix下是\n(0A),Windows下是\r\n(0D0A),Mac下是\r(0D)。当在一个Windows操作系统上用ASCII方式从Unix服务器上下载文件时——无论是文本文件还是二进制文件——都会进行检测和转换:每检测到一个0A,则认为是回车符号,自动插入0D形成Windows下的回车符。显然,如果下载的是文本文件,这种转换是很有用的——我们能在Windows下看到分行后的文本,否则我们看到的是中间夹杂着小黑方块的不换行的一堆文字;然而如果下载的是二进制文件(比如exe或rar),这种转换无异于画蛇添足,破坏了整个文件。

 

根据GOOGLE到的东西,我们来对源码做一点小手术,强制CDN Sync Tool来使用FTP_BINARY的二进制方式来上传文件。

1.打开 wp-content/plugins/cdn-sync-tool/lib/Cst.php
2.找到 ftp_put($this->cdnConnection, $filename, $file, FTP_ACSII); 这一句
3.修改成 ftp_put($this->cdnConnection, $filename, $file, FTP_BINARY);

现在再重新上传图片,就不会出问题了。

发表回复

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


此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据