我一直在尝试为一些mp3制作一个zip存档。我遇到的问题是,有些mp3只是以奇怪的方式打破了压缩过程。如果我不包含其中一个文件,一切都很好;如果我把它们中的一个放进去,它会变成梨形。
最终,我想将zip文件放在我的服务器上供人们下载,我想在运行时使用php。如果我没有在档案中包含任何有问题的文件,它可以正常工作。如果我这样做,那么我得到'500内部服务器错误',但服务器错误日志中没有任何内容。通过为流程的每个步骤创建我自己的错误日志,它就是我尝试拉链>关闭它似乎失败了。
我尝试退一步,并使用7zip在本地制作zip存档。如果我包含一个问题文件,我可以这样做,但如果我将此zip存档上传到服务器然后下载它,则下载已损坏。如果我不包含问题文件,那很好。 winzip也是如此。
总共我有大约100个mp3,其中大约有6个引起这种行为。它们都具有相同的权限,它们都存在,它们都在同一个目录中,它们的大小大致相同。我甚至尝试从源.wav文件再次制作mp3 - 新版本也发生了同样的事情。
我完全难过了。我到处搜索过,找不到任何线索。帮助!
答案 0 :(得分:0)
可能有几个原因(它们可以一起发生):( a)PHP zip创建中的错误代码 - 在您的代码中或在实际压缩的代码中,(b)用于上载或下载文件的文本模式。
如您所见,使用7zip解决了PHP zip的问题,因此压缩代码中必定存在一些错误。现在,如果你创建了ZIP并将它们下载为已损坏,这可能意味着该文件是使用文本模式提供的。
其中一个非显而易见的原因是PHP中启用了mbcs函数重载。启用重载,strlen和类似函数,当二进制数据传递给它们时,开始产生意外结果(这是因为它们将输入视为UTF8字符串)。