2014-09-22 2 views
0

я хочу, чтобы удалить все содержимое каталога, за исключением некоторых файлов есть описание: the directories that i don't want to delete them is markedPhp - удаление содержимого каталога, за исключением некоторых элементов

причина, почему я должен удалить все содержимое, кроме тех файлов, вызывают другие файлы (что я хочу удалить их) генерируется, поэтому я не знаю их имен, есть идея сделать это? это сценарий я пытаюсь создать его:

<?php 
$filesToKeep = array(
    'index.php', 
    'i.php', 
    'c.php' 
); 

$dirList = glob('*'); 
foreach ($dirList as $file) { 
    if (! in_array($file, $filesToKeep)) { 

      unlink($file); 
     }//END IF 
    }//END IF 
}//END FOREACH LOOP 

?> 
+0

так получить список файлов в каталоге (например, '$ files = glob ('*')', удалите файлы, которые вы ХОТИТЕ удержать от массива, затем 'foreach ($ files as $ file) {unlink ($ file);} ' –

ответ

1

Как Марк упоминается в комментариях, как я хотел бы удалить все файлы, кроме конкретных единиц в каталоге будет использовать glob.

<?php 
$filesToKeep = array(
    'index.php', 
    'i.php', 
    'c.php' 
); 

$dirList = glob('*'); 
foreach ($dirList as $file) { 
    if (! in_array($file, $filesToKeep)) { 
     if (is_dir($file)) { 
      rmdir($file); 
     } else { 
      unlink($file); 
     }//END IF 
    }//END IF 
}//END FOREACH LOOP 

?> 

Поместите все имена файлов в $filesToKeep массив, который вы хотите сохранить. Когда цикл foreach запущен, он будет хранить все файлы, которые находятся в массиве $filesToKeep. Возможно, перед тем, как запустить эту функцию с помощью функции unlink, вы можете просто эхо-файлы, которые будут удалены для первого экрана, чтобы вы случайно не удалили те, которые хотите сохранить.

+0

спасибо, что мне нужно, но не только файлы, которые я хочу сохранить, но также и каталоги, поэтому я добавляю их так: ' $ filesToKeep = array ()«index.php», «i.php», «DirectoryName, „c.php“ );' и у меня есть еще один Probleme также элемент я хочу удалить является каталоги и у меня есть эта ошибка 'unlink (images): Является ли каталог в строке delete.php 25' – 2014-09-22 18:34:45

+0

Да. Вы добавляете их так же, как вы добавляете файлы. Просто убедитесь, что вы просматриваете вывод glob перед запуском с отключением. EDIT: нет. плохо добавьте rmdir для удаления каталога. – Mic1780

+0

aaah ok я попробую ^^ – 2014-09-22 18:38:00

1

благодаря @ Mic1780 мы могли бы это сделать, но он постоянно возвращается сообщение об ошибке:

'directoryName' is not empty поэтому нам нужно рекурсивную функцию, чтобы сделать это, и это весь код:

<?php 
function rrmdir($dir) { 
    if (is_dir($dir)) { 
    $objects = scandir($dir); 
    foreach ($objects as $object) { 
     if ($object != "." && $object != "..") { 
     if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
     } 
    } 
    reset($objects); 
    rmdir($dir); 
    } 
} 
$filesToKeep = array(
    'iall.php', 
    'a0a058baaeef16e88f6bd2ee36c03f6f', 
    'index.php', 
    'a0a058baaeef16e88f6bd2ee36c03f6f.php', 
    'c.txt', 
    'i.php', 
    'c.php' 
); 

$dirList = glob('*'); 
foreach ($dirList as $file) { 
    if (! in_array($file, $filesToKeep)) { 
     if (is_dir($file)) { 
      rrmdir($file); 
     } else { 
      unlink($file); 
     }//END IF 
    }//END IF 
}//END FOREACH LOOP 

?>