Я использую глобальную рекурсию, чтобы найти все каталоги с файлами index.php в них. То, что я пытаюсь сделать, это выяснить, выходит ли глубина за пределы определенного уровня.
Пример:
Корневая папка: /
подкаталог root: ./subdirectory/
подкаталог подкаталога: ./dubdirectory/subdirectory/
Уровень 0 будет корневой папкой.
Уровень 1 будет подкаталогом.
Уровень 2 будет подкаталогом подкаталога.
Как я могу определить, насколько глубина достигает уровня 2 или выше?
Пример псевдокода:
if ($subdirectory_depth >= 2) {
//do something;
}
Вот мой сценарий
if ( ! function_exists('glob_recursive'))
{
function glob_recursive($pattern, $flags = 0 )
{
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR) as $dir)
{
if (preg_match('#/(?:cgi-bin|css|images|includes|test)#', $dir)) continue; // exclude these directories
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}
return $files;
}
}
$dirlist = glob_recursive( $dir_structure.'*index.php' );
Вы не можете просто посчитать число ‘/’?
Например.
<?
if ( ! function_exists('glob_recursive'))
{
function glob_recursive($pattern, $flags = 0 )
{
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR) as $dir)
{
if (preg_match('#/(?:cgi-bin|css|images|includes|test)#', $dir)) continue; // exclude these directories
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}
return $files;
}
}
$dirlist = glob_recursive( '/home/storage/e/63/25/phpsandbox/ToBeDeleted/2015/may/'.'*index.php' );
$maxdept = 10;
foreach($dirlist as $filepath) {
$dept = substr_count($filepath, '/');
echo '<br>'.$filepath.' Dept: '.$dept;
if($dept > $maxdept) {
echo ' (Deeper than '.$maxdept.')';
}
}
?>
Других решений пока нет …