2010-08-12 109 views
3

我正在用PHP创建一个zip文件供用户下载。我没有从PHP或检查zipArchive类的GetStatusString函数中得到任何错误。但是,如果我将一些文件放入存档中,那么当我尝试打开它时,会出现“压缩(压缩)文件夹无效或损坏”错误。我检查了所有我添加的文件,它们都很好。我能想到的唯一的事情是较大的文件造成问题。但“大”文件只有大约半兆字节,并且我找不到有关zipArchive的文件大小限制的任何文档。对其他事情有任何想法可以尝试,所以我可以找出这个问题?谢谢。PHP的zipArchive类的大小限制?

编辑: 我已经缩小到一个特定的文件,造成麻烦。还有其他人的工作是一样大或更大,所以我想抛弃这个想法。下面列举了一些做工精细的文件名的例子:

627 Jane.CCD.pdf
712 Example_DrNotes.pdf
625 Jane.Labs2.pdf

是的,有空间的文件名...继承代码问题。这里是行不通的文件名:

似乎并不像它可能是一个文件名问题

623 Jane.Labs.pdf。这最终会通过网络,但我正在检查它在服务器上的实际zip文件,这就是我得到错误的地方。

下面的代码:

$zip = new ZipArchive(); 
$zfileName = $GLOBALS["localUploadRoot"] . $zfile; 
$requests = $this->getRequests(true); 
foreach ($requests AS $r) { 
    if (file_exists($GLOBALS["localInboundRequests"] . $r["file"])) { 
     $zip->addFile($GLOBALS["localInboundRequests"] . $r["file"], $r["file"]); 
    } 
} 
$zip->close(); 

编辑2: 对不起,我不能发布的文件。它包含个人信息。

+0

也许你应该在构建zip文件的位置发布代码的相关端口。当然,500K文件不会造成麻烦。 – Artefacto 2010-08-12 22:55:10

+0

创作过程是否真的完成了?你能显示一些你正在添加的文件的代码和例子文件名吗?他们不会碰巧拥有特殊字符的名字? – 2010-08-12 22:56:10

+0

CLI还是网络?你是先把它们保存到磁盘上,还是直接把它们“流”到客户端。 (如果是后者,请确保您没有任何zlib压缩进行。) – Matthew 2010-08-12 22:57:45

回答

3

zip文件的限制是4GB(压缩文件)。如果压缩文件大小大于4GB,则无法解压缩。所以,更好的方式来分割您的4GB的压缩文件。

+0

伙计,你救了我的命! – Sliq 2012-07-12 08:56:01

0

由于压缩文件的自然文件大小限制为4GB(〜3.6GB为正确),因此该类会生成大于4 GB的损坏文件。使用tar.gz是一个合适的选择。