使用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);

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

巧用nginx的sendfiles设置404

使用LNMP架构的朋友会知道,如果直接在PHP中进行header 404设置用户会访问到一个空白的页面,为了解决这种问题,我们可以使用NGINX的SENDFILE特性来让用户直接看到NGINX默认的404页面。

header('status: 404 Not Found');
header('X-Accel-Redirect: '.'1.exe');


这样设置,用户直接看到的就会直接是NGINX默认的404页面了。

设置前:

设置后: