*
* All methods return the current Finder object to allow easy chaining:
*
- * $finder = Finder::create()->files()->name('*.php')->in(__DIR__);
+ * $finder = Finder::create()->files()->name('*.php')->in(__DIR__);
*
* @author Fabien Potencier <fabien@symfony.com>
*/
*
* Usage:
*
- * $finder->depth('> 1') // the Finder will start matching at level 1.
- * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
+ * $finder->depth('> 1') // the Finder will start matching at level 1.
+ * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
*
* @param string|int $level The depth level expression
*
*
* The date must be something that strtotime() is able to parse:
*
- * $finder->date('since yesterday');
- * $finder->date('until 2 days ago');
- * $finder->date('> now - 2 hours');
- * $finder->date('>= 2005-10-15');
+ * $finder->date('since yesterday');
+ * $finder->date('until 2 days ago');
+ * $finder->date('> now - 2 hours');
+ * $finder->date('>= 2005-10-15');
*
* @param string $date A date range string
*
*
* You can use patterns (delimited with / sign), globs or simple strings.
*
- * $finder->name('*.php')
- * $finder->name('/\.php$/') // same as above
- * $finder->name('test.php')
+ * $finder->name('*.php')
+ * $finder->name('/\.php$/') // same as above
+ * $finder->name('test.php')
*
* @param string $pattern A pattern (a regexp, a glob, or a string)
*
*
* Strings or PCRE patterns can be used:
*
- * $finder->contains('Lorem ipsum')
- * $finder->contains('/Lorem ipsum/i')
+ * $finder->contains('Lorem ipsum')
+ * $finder->contains('/Lorem ipsum/i')
*
* @param string $pattern A pattern (string or regexp)
*
*
* Strings or PCRE patterns can be used:
*
- * $finder->notContains('Lorem ipsum')
- * $finder->notContains('/Lorem ipsum/i')
+ * $finder->notContains('Lorem ipsum')
+ * $finder->notContains('/Lorem ipsum/i')
*
* @param string $pattern A pattern (string or regexp)
*
*
* You can use patterns (delimited with / sign) or simple strings.
*
- * $finder->path('some/special/dir')
- * $finder->path('/some\/special\/dir/') // same as above
+ * $finder->path('some/special/dir')
+ * $finder->path('/some\/special\/dir/') // same as above
*
* Use only / as dirname separator.
*
*
* You can use patterns (delimited with / sign) or simple strings.
*
- * $finder->notPath('some/special/dir')
- * $finder->notPath('/some\/special\/dir/') // same as above
+ * $finder->notPath('some/special/dir')
+ * $finder->notPath('/some\/special\/dir/') // same as above
*
* Use only / as dirname separator.
*
/**
* Adds tests for file sizes.
*
- * $finder->size('> 10K');
- * $finder->size('<= 1Ki');
- * $finder->size(4);
+ * $finder->size('> 10K');
+ * $finder->size('<= 1Ki');
+ * $finder->size(4);
*
* @param string|int $size A size range string or an integer
*
foreach ((array) $dirs as $dir) {
if (is_dir($dir)) {
$resolvedDirs[] = $this->normalizeDir($dir);
- } elseif ($glob = glob($dir, (defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR)) {
+ } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR)) {
$resolvedDirs = array_merge($resolvedDirs, array_map(array($this, 'normalizeDir'), $glob));
} else {
throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir));
*/
public function getIterator()
{
- if (0 === count($this->dirs) && 0 === count($this->iterators)) {
+ if (0 === \count($this->dirs) && 0 === \count($this->iterators)) {
throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.');
}
- if (1 === count($this->dirs) && 0 === count($this->iterators)) {
+ if (1 === \count($this->dirs) && 0 === \count($this->iterators)) {
return $this->searchInDirectory($this->dirs[0]);
}
*
* The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array.
*
- * @param mixed $iterator
+ * @param iterable $iterator
*
* @return $this
*
$this->iterators[] = $iterator->getIterator();
} elseif ($iterator instanceof \Iterator) {
$this->iterators[] = $iterator;
- } elseif ($iterator instanceof \Traversable || is_array($iterator)) {
+ } elseif ($iterator instanceof \Traversable || \is_array($iterator)) {
$it = new \ArrayIterator();
foreach ($iterator as $file) {
$it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file));
}
/**
- * @param $dir
+ * @param string $dir
*
* @return \Iterator
*/
/**
* Normalizes given directory names by removing trailing slashes.
*
+ * Excluding: (s)ftp:// wrapper
+ *
* @param string $dir
*
* @return string
*/
private function normalizeDir($dir)
{
- return rtrim($dir, '/'.\DIRECTORY_SEPARATOR);
+ $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR);
+
+ if (preg_match('#^s?ftp://#', $dir)) {
+ $dir .= '/';
+ }
+
+ return $dir;
}
}