Вход Регистрация
Файл: gapps/vendor/symfony/finder/Iterator/FilterIterator.php
Строк: 73
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentFinderIterator;

/**
 * This iterator just overrides the rewind method in order to correct a PHP bug,
 * which existed before version 5.5.23/5.6.7.
 *
 * @see https://bugs.php.net/68557
 *
 * @author Alex Bogomazov
 */
abstract class FilterIterator extends FilterIterator
{
    
/**
     * This is a workaround for the problem with FilterIterator leaving inner FilesystemIterator in wrong state after
     * rewind in some cases.
     *
     * @see FilterIterator::rewind()
     */
    
public function rewind()
    {
        if (
PHP_VERSION_ID 50607 || (PHP_VERSION_ID 50523 && PHP_VERSION_ID 50600)) {
            
parent::rewind();

            return;
        }

        
$iterator $this;
        while (
$iterator instanceof OuterIterator) {
            
$innerIterator $iterator->getInnerIterator();

            if (
$innerIterator instanceof RecursiveDirectoryIterator) {
                
// this condition is necessary for iterators to work properly with non-local filesystems like ftp
                
if ($innerIterator->isRewindable()) {
                    
$innerIterator->next();
                    
$innerIterator->rewind();
                }
            } elseif (
$innerIterator instanceof FilesystemIterator) {
                
$innerIterator->next();
                
$innerIterator->rewind();
            }

            
$iterator $innerIterator;
        }

        
parent::rewind();
    }
}
Онлайн: 1
Реклама