Nette\Loaders\RobotLoader::createFileIterator PHP Method

createFileIterator() private method

Creates an iterator scaning directory for PHP files, subdirectories and 'netterobots.txt' files.
private createFileIterator ( $dir ) : Iterator
return Iterator
    private function createFileIterator($dir)
    {
        if (!is_dir($dir)) {
            throw new Nette\IOException("File or directory '{$dir}' not found.");
        }
        $ignoreDirs = is_array($this->ignoreDirs) ? $this->ignoreDirs : preg_split('#[,\\s]+#', $this->ignoreDirs);
        $disallow = [];
        foreach ($ignoreDirs as $item) {
            if ($item = realpath($item)) {
                $disallow[$item] = TRUE;
            }
        }
        $iterator = Nette\Utils\Finder::findFiles(is_array($this->acceptFiles) ? $this->acceptFiles : preg_split('#[,\\s]+#', $this->acceptFiles))->filter(function (SplFileInfo $file) use(&$disallow) {
            return !isset($disallow[$file->getPathname()]);
        })->from($dir)->exclude($ignoreDirs)->filter($filter = function (SplFileInfo $dir) use(&$disallow) {
            $path = $dir->getPathname();
            if (is_file("{$path}/netterobots.txt")) {
                foreach (file("{$path}/netterobots.txt") as $s) {
                    if (preg_match('#^(?:disallow\\s*:)?\\s*(\\S+)#i', $s, $matches)) {
                        $disallow[$path . str_replace('/', DIRECTORY_SEPARATOR, rtrim('/' . ltrim($matches[1], '/'), '/'))] = TRUE;
                    }
                }
            }
            return !isset($disallow[$path]);
        });
        $filter(new SplFileInfo($dir));
        return $iterator;
    }