Gaufrette\Adapter\Ftp::fetchKeys PHP Method

fetchKeys() private method

private fetchKeys ( $directory = '', $onlyKeys = true )
    private function fetchKeys($directory = '', $onlyKeys = true)
    {
        $directory = preg_replace('/^[\\/]*([^\\/].*)$/', '/$1', $directory);
        $lines = ftp_rawlist($this->getConnection(), '-alR ' . $this->directory . $directory);
        if (false === $lines) {
            return array('keys' => array(), 'dirs' => array());
        }
        $regexDir = '/' . preg_quote($this->directory . $directory, '/') . '\\/?(.+):$/u';
        $regexItem = '/^(?:([d\\-\\d])\\S+)\\s+\\S+(?:(?:\\s+\\S+){5})?\\s+(\\S+)\\s+(.+?)$/';
        $prevLine = null;
        $directories = array();
        $keys = array('keys' => array(), 'dirs' => array());
        foreach ((array) $lines as $line) {
            if ('' === $prevLine && preg_match($regexDir, $line, $match)) {
                $directory = $match[1];
                unset($directories[$directory]);
                if ($onlyKeys) {
                    $keys = array('keys' => array_merge($keys['keys'], $keys['dirs']), 'dirs' => array());
                }
            } elseif (preg_match($regexItem, $line, $tokens)) {
                $name = $tokens[3];
                if ('.' === $name || '..' === $name) {
                    continue;
                }
                $path = ltrim($directory . '/' . $name, '/');
                if ('d' === $tokens[1] || '<dir>' === $tokens[2]) {
                    $keys['dirs'][] = $path;
                    $directories[$path] = true;
                } else {
                    $keys['keys'][] = $path;
                }
            }
            $prevLine = $line;
        }
        if ($onlyKeys) {
            $keys = array('keys' => array_merge($keys['keys'], $keys['dirs']), 'dirs' => array());
        }
        foreach (array_keys($directories) as $directory) {
            $keys = array_merge_recursive($keys, $this->fetchKeys($directory, $onlyKeys));
        }
        return $keys;
    }