Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使用";读取所有文件;zip_read";从zip文件_Php_Zip - Fatal编程技术网

Php 无法使用";读取所有文件;zip_read";从zip文件

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);

我必须遍历包含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);
        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,效果很好。现在我可以读取所有文件。