open('./archive.zip', ZIPARCHIVE::CREATE) !== TRUE) { d-6ren">
gpt4 book ai didi

php - RecursiveDirectoryIterator 在 "Too many open files"上抛出 UnexpectedValueException

转载 作者:可可西里 更新时间:2023-11-01 12:53:39 25 4
gpt4 key购买 nike

以下代码:

$zip = new ZipArchive();

if ($zip->open('./archive.zip', ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./folder/"));

foreach ($iterator as $key => $value) {
try {
$zip->addFile(realpath($key), $key);
echo "'$key' successfully added.\n";
} catch (Exception $e) {
echo "ERROR: Could not add the file '$key': $e\n";
}
}

$zip->close();

如果您尝试遍历的子文件夹中有太多文件,则抛出以下异常:

Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(./some/path/): failed to open dir: Too many open files' in /some/other/path/zip.php:24
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct('./some/path/')
#1 /some/other/path/zip.php(24): RecursiveDirectoryIterator->getChildren()
#2 {main}
thrown in /some/other/path/zip.php on line 24

如何在不遇到此异常的情况下成功迭代大量文件夹和文件?

最佳答案

只需将迭代器转换为带有 iterator_to_array 的数组即可函数,看起来你可以遍历任意数量的文件:

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./folder/"));
$files = iterator_to_array($iterator, true);

// iterate over the directory
// add each file found to the archive
foreach ($files as $key => $value) {
try {
$zip->addFile(realpath($key), $key);
echo "'$key' successfully added.\n";
} catch (Exception $e) {
echo "ERROR: Could not add the file '$key': $e\n";
}
}

关于php - RecursiveDirectoryIterator 在 "Too many open files"上抛出 UnexpectedValueException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com