1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Module\Di\Code\Scanner;
class DirectoryScanner
{
/**
* Scan directory
*
* @param string $dir
* @param array $patterns
* @param string[] $excludePatterns
* @return array
*/
public function scan($dir, array $patterns = [], array $excludePatterns = [])
{
$recursiveIterator = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS)
);
$output = [];
foreach ($recursiveIterator as $file) {
/** @var $file \SplFileInfo */
if ($file->isDir()) {
continue;
}
$filePath = str_replace('\\', '/', $file->getRealPath());
if (!empty($excludePatterns)) {
foreach ($excludePatterns as $excludePattern) {
if (preg_match($excludePattern, $filePath)) {
continue 2;
}
}
}
foreach ($patterns as $type => $pattern) {
if (preg_match($pattern, $filePath)) {
$output[$type][] = $filePath;
break;
}
}
}
return $output;
}
}