1: <?php
2:
3: /*
4: * This file is part of the Symfony package.
5: *
6: * (c) Fabien Potencier <fabien@symfony.com>
7: *
8: * For the full copyright and license information, please view the LICENSE
9: * file that was distributed with this source code.
10: */
11:
12: namespace Symfony\Component\Finder\Iterator;
13:
14: /**
15: * This iterator just overrides the rewind method in order to correct a PHP bug.
16: *
17: * @see https://bugs.php.net/bug.php?id=49104
18: *
19: * @author Alex Bogomazov
20: */
21: abstract class FilterIterator extends \FilterIterator
22: {
23: /**
24: * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
25: * rewind in some cases.
26: *
27: * @see FilterIterator::rewind()
28: */
29: public function rewind()
30: {
31: $iterator = $this;
32: while ($iterator instanceof \OuterIterator) {
33: if ($iterator->getInnerIterator() instanceof \FilesystemIterator) {
34: $iterator->getInnerIterator()->next();
35: $iterator->getInnerIterator()->rewind();
36: }
37: $iterator = $iterator->getInnerIterator();
38: }
39:
40: parent::rewind();
41: }
42: }
43: