Php 无法使用";读取所有文件;zip_read";从zip文件
我必须遍历包含65000个文件的zip文件中的所有文件,但它只能读取315个文件 找不到原因,错误日志中没有错误。 我使用了以下代码:Php 无法使用";读取所有文件;zip_read";从zip文件,php,zip,Php,Zip,我必须遍历包含65000个文件的zip文件中的所有文件,但它只能读取315个文件 找不到原因,错误日志中没有错误。 我使用了以下代码: <?php $zip = zip_open($newfile); if ($zip) { $counter = 0; while ($zip_entry = zip_read($zip)) { $counter++; $filename = zip_entry_name($zip_entry);
<?php
$zip = zip_open($newfile);
if ($zip) {
$counter = 0;
while ($zip_entry = zip_read($zip)) {
$counter++;
$filename = zip_entry_name($zip_entry);
echo $counter . "-" . $filename . "<br/>";
}
zip_close($zip);
}
一个(常规)zip文件中的文件数存储在一个无符号16位整数中。这意味着最大值为65535
是否该zip文件中的实体数超过65535个,并且该整数溢出,仅显示num_文件-65536
,在您的情况下为315个?@VipinSoni如果您可以控制创建,请确保文件数不超过65535个。如果你必须使用这个文件,我会尝试几个软件包解压,希望他们阅读所有的文件,而不仅仅是看计数。另一个选项是使用十六进制编辑器将该值编辑为0xffff(zip文件末尾的2 x 16位值),以读取前65535个文件。最后一个选项是自己用一些代码读取和解压这些块。有关zip格式的描述,请参阅。@VipinSoni我做了一些测试:看起来WinRAR(在这里使用较旧的版本)能够读取所有文件,即使计数设置为较低的数字(解压所有文件后,在最后给出一个错误)。我对一个包含22个条目的文件进行了测试,并将数字改为4。不确定它是否能够读取超过65535个条目。对于确实需要超过65535个条目的Zip文件,可以使用。感谢您的解释,我找到了一个关于(更改PHP版本)的循环。我从PHP7.0.10改为PHP5.5.38,效果很好。现在我可以读取所有文件。