Php 某些mp3文件创建zip错误

Php 某些mp3文件创建zip错误,php,zip,Php,Zip,我一直在尝试为一些MP3制作一个zip存档。我的问题是,有些MP3只是以奇怪的方式破坏了压缩过程。如果我不包括其中一个文件,一切都很好;如果我把其中一个放进去,它就会变成梨形 最后,我想把zip文件放在我的服务器上,供人们下载,我想使用php动态创建它。如果我没有将任何有问题的文件包括在归档中,它就可以正常工作。如果我这样做,那么我会得到一个“500内部服务器错误”,但服务器错误日志中没有任何内容。通过为流程的每一步创建我自己的错误日志,在我尝试执行zip->close时,它似乎失败了 我试着后

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

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

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

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


我完全被难住了。我找遍了,什么线索也找不到。救命

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

正如您自己所见,使用7zip解决了PHPZIP的问题,因此压缩代码中一定存在一些错误。现在,如果您放置创建的ZIP并将其作为断开状态下载,这可能意味着该文件是使用文本模式提供的


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

最好的方法是获得准确的错误消息。您可能查找了错误的错误日志,必须在某个地方记录一个500错误(除非服务器本身严重配置错误。),如@Pekka웃 他说,获取日志是关键。我怀疑MP3文件名中会包含非ASCII字符或空格。我无法获取错误消息-共享主机不提供apache错误日志,如果我自己记录,则不会记录任何内容。文件名中没有非ASCII字符,尽管在一些(但不是全部)有问题的文件中有空格。但是,许多文件中也有空格,不会引起问题。如果您在PHP文件中激活错误报告,那么您应该能够运行它并查看出现了什么错误。