我正在使用PHP提取zip存档。存档的结构是七个文件夹,每个文件夹包含10,000个文件的顺序,每个文件大约1 kB。
我的代码非常简单,并使用ZipArchive类:
$zip = new ZipArchive();
$result = $zip->open($filename);
if ($result === true) {
$zip->extractTo($tmpdir);
$zip->close();
}
我遇到的问题是提取似乎停止了。第一个文件夹是完全提取的,但只有大约一半是第二个文件夹。其他五个都没有被提取出来。
我也试过使用这个代码,它一次将其分成10 kB的块,但结果完全相同:
$archive = zip_open($filename);
while ($entry = zip_read($archive)) {
$size = zip_entry_filesize($entry);
$name = zip_entry_name($entry);
if (substr($name, -1) == '/') {
if (!file_exists($tmpdir . $name)) mkdir($tmpdir . $name);
} else {
$unzipped = fopen($tmpdir . $name, 'wb');
while ($size > 0) {
$chunkSize = ($size > 10240) ? 10240 : $size;
$size -= $chunkSize;
$chunk = zip_entry_read($entry, $chunkSize);
if ($chunk !== false) fwrite($unzipped, $chunk);
}
fclose($unzipped);
}
}
我也尝试将PHP中的内存限制从512 MB增加到1024 MB,但同样得到了相同的结果。解压缩一切都在100 MB左右,所以无论如何我都不会预料到它会成为内存问题。
答案 0 :(得分:0)
可能是你的最长执行时间......通过将限制设置为0或设置一个好的值来完全禁用限制。
ini_set('max_execution_time', 10000);
...在生产使用中不要将其设置为0 ......
如果由于disable_function指令而无权访问ini_set(),则可能需要直接在php.ini中编辑其值。