Как пройти через все подпапки со специальным файлом в нем? - PullRequest
0 голосов
/ 02 августа 2010

Я хочу просмотреть все подпапки определенной папки и проверить, есть ли в них специальный файл, иначе удалите подпапку.

Возьмем этот пример (файл file.txt здесь является специальным файлом):

  • folder_all
    • folder1
      • file.txt
    • folder2
      • file.txt
    • folder3
      • пусто

Поскольку в папке folder3 нет файла, я хочу удалить его.
И это то, что я хочу сделать. Есть идеи?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

обновленный код

Вы можете использовать RecursiveDirectoryIterator класс:

<?php

$dir = '/path/';
$file = '/filetosearch.txt';
$paths = array();

$i = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

while($i->valid()) {

    if (!$it->isDot()) {

        $subpath = $it->getSubPath();

        if ($subpath != '') {
            // if inside a subdirectory
            // add the subpath in our array flagging it as false
            if (!array_key_exists($subpath, $paths) $paths[$subpath] = false;

            // check if it's our file
            if (substr_compare($i->getSubPathName(), $file, -strlen($file), strlen($file)) === 0)
                $paths[$subpath] = true;

    }

    $it->next();
}

// now check our paths array and delete all false (not containing the file)
foreach ($paths as $key => $value)
{
    if (!$value) rmdir($dir.$key);
}

?>
0 голосов
/ 02 августа 2010
function recursive_delete_if_exists($path,$file) {
   foreach (glob($path.'/*.*') as $name)
      if (is_dir($name))
         recursive_delete_if_exists($name,$file);
      elseif ($name==$file)
         unlink($path);
}

recursive_delete_if_exists('/folder_all','file.txt');
0 голосов
/ 02 августа 2010

Просто переберите все подпапки folderall и проверьте, существует ли файл folder_all/$subfoldername/file.txt.Если нет, удалите его.Это должен быть цикл.

API:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...