php – RecursiveDirectoryIterator对“打开的文件过多”抛出Une
发布时间:2020-12-13 17:52:03 所属栏目:PHP教程 来源:网络整理
导读:以下代码: $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 $
以下代码:
$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': $en"; } } $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': $en"; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |