1

我一直在尝试为一些 mp3 制作一个 zip 存档。我遇到的问题是,一些 mp3 以奇怪的方式破坏了压缩过程。如果我不包含这些文件之一,一切都很好;如果我把其中一个放进去,它就会变成梨形。

最终,我想将 zip 文件放在我的服务器上供人们下载,并且我想使用 php 即时制作它。如果我没有在存档中包含任何有问题的文件,它就可以正常工作。如果我这样做了,那么我会收到“500 内部服务器错误”,但服务器错误日志中没有任何内容。通过为流程的每个步骤创建我自己的错误日志,在我尝试执行 zip->close 时,它​​似乎失败了。

我试着退后一步,使用 7zip 在本地制作 zip 存档。如果我包含问题文件,我可以这样做,但如果我将此 zip 存档上传到服务器然后下载它,则下载已损坏。如果我不包含问题文件,那很好。winzip也是如此。

我总共有大约 100 个 mp3,其中大约 6 个会导致这种行为。它们都具有相同的权限,它们都存在,它们都在同一个目录中,它们的大小大致相同。我什至尝试从源 .wav 文件再次制作 mp3 - 新版本也发生了同样的事情。

我完全被难住了。我找遍了,找不到任何线索。帮助!!

4

1 回答 1

0

可能有几个原因(它们可能同时发生):(a) PHP zip 创建中的错误代码 - 无论是在您的代码中还是在执行实际压缩的代码中,(b) 用于上传或下载文件的文本模式。

如您所见,使用 7zip 解决了 PHP zip 的问题,因此压缩代码中肯定存在一些错误。现在,如果您放置创建的 ZIP 并且它们被下载为损坏,这可能意味着该文件是使用文本模式提供的。

不明显的原因之一是在 PHP 中启用了 mbcs 函数重载。启用重载后,strlen 和类似函数在将二进制数据传递给它们时开始产生意外结果(这是因为它们将输入视为 UTF8 字符串)。

于 2013-10-06T06:33:19.663 回答