我们的产品是电子书,以.epub和.mobi格式提供,通过用于WordPress的http://www.tipsandtricks-hq.com/电子商店插件生成加密下载链接。
问题在5天前突然开始,之前已经工作了大约3个月
当客户通过下载链接下载购买时,所有.epub文件都会损坏,而Adobe Digital Editions在尝试将ePub导入库时会出错
所有.mobi文件在下载后损坏,然后加载到Kindle上,Kindle会出现类似的错误
我们尝试关闭Google网址缩短功能,错误
我们已经测试了与IE,Chrome和Firefox的链接,错误
我们测试时没有加密链接,通过浏览器中的直接链接下载文件,它们工作正常,没有错误
我们学到了什么:
我们已经测试过使用FTP以ASCII和二进制模式下载...使用ASCII我们得到的错误与使用加密下载链接相同
使用ASCII和二进制文件传输的文件大小相同,但运行哈希检查显示内容不同
我们正在使用FileZilla在PC和Mac上通过FTP进行测试,但错误只发生在PC上
所以,我们假设这个问题与文件传输类型和PC有关
在/home/foo/bar/wp-content/plugins/wp-cart-for-digital-products/download.php中我们看到标题(“Content-Transfer-Encoding:binary”);所以我们假设在使用加密链接时强制使用Binary
加密链接字符串中是否可能存在强制ASCII的某些字符?以下是加密链接的示例:
https://fu.com/bar/download.php?file=LRtro6WQMN12ip%2BEcL0TYS8sMZmSKOlkRedVCZyfACsqSllzCAjDp%2FZJyfQ2oq0ZP6vg1EMrR%2FOFC4B3wGDHl3N0u0sulcBhIfkOJ0C0UQh6
以下是http标题:
Status: HTTP/1.1 200 OK
Date: Wed, 27 Feb 2013 14:55:47 GMT
Server: Apache
X-Powered-By: PHP/5.3.17
Set-Cookie: PHPSESSID=7d61c9dd6ecbd321bea8cffg4a25d5e8; path=/
Expires: 0
Cache-Control: public
Pragma: public
X-CF-Powered-By: WP 1.3.9
Content-Description: File Transfer
Content-Disposition: attachment; filename="Some-File-Name-Which-Was-Replaced.epub"
Content-Transfer-Encoding: binary
Content-Length: 5088032
Connection: close
Content-Type: application/epub+zip
还有什么可能导致这种情况?我们的服务器可以在.htaccess或apache配置设置中强制使用ASCII吗?
非常感谢
答案 0 :(得分:0)
我们的一位程序员在他的编辑器中使用了错误的字符编码。我们需要使用UTF-8(BOM关闭)或空格处理PHP文件,否则新行可能会以某种方式干扰文件的完整性:
UTF-8 BOM signature in PHP files
WordPress中的代码行'functions.php:if ($bom != b"\xEF\xBB\xBF")
我们的罪魁祸首HTML字符代码ï°¿
,我们根据HEX值解码:EF BB BF
那是在破坏的.epub文件的开头出现的垃圾数据。
functions.php总是输出这个垃圾数据。
很高兴我们终于找到问题的根源,让我们疯了!哈哈!!!
和平& amp;快乐的编码给你