function file_unmanaged_delete_recursive

Deletes all files and directories in the specified filepath recursively.

If the specified path is a directory then the function will call itself recursively to process the contents. Once the contents have been removed the directory will also be removed.

If the specified path is a file then it will be passed to file_unmanaged_delete().

Note that this only deletes visible files with write permission.

Parameters

$path: A string containing either an URI or a file or directory path.

$callback: (optional) Callback function to run on each file prior to deleting it and on each directory prior to traversing it. For example, can be used to modify permissions.

Return value

TRUE for success or if path does not exist, FALSE in the event of an error.

See also

file_unmanaged_delete()

Related topics

14 calls to file_unmanaged_delete_recursive()
FileStorage::deleteAll in drupal/core/lib/Drupal/Component/PhpStorage/FileStorage.php
Implements Drupal\Component\PhpStorage\PhpStorageInterface::deleteAll().
image_style_flush in drupal/core/modules/image/image.module
Flush cached media for a style.
image_uninstall in drupal/core/modules/image/image.install
Implements hook_uninstall().
RetrieveFileTest::testFileRetrieving in drupal/core/modules/system/lib/Drupal/system/Tests/System/RetrieveFileTest.php
Invokes system_retrieve_file() in several scenarios.
simpletest_clean_temporary_directories in drupal/core/modules/simpletest/simpletest.module
Find all leftover temporary directories and remove them.

... See full list

1 string reference to 'file_unmanaged_delete_recursive'
FileStorage::deleteAll in drupal/core/lib/Drupal/Component/PhpStorage/FileStorage.php
Implements Drupal\Component\PhpStorage\PhpStorageInterface::deleteAll().

File

drupal/core/includes/file.inc, line 1010
API for handling file uploads and server file management.

Code

function file_unmanaged_delete_recursive($path, $callback = NULL) {
  if (isset($callback)) {
    call_user_func($callback, $path);
  }
  if (is_dir($path)) {
    $dir = dir($path);
    while (($entry = $dir
      ->read()) !== FALSE) {
      if ($entry == '.' || $entry == '..') {
        continue;
      }
      $entry_path = $path . '/' . $entry;
      file_unmanaged_delete_recursive($entry_path, $callback);
    }
    $dir
      ->close();
    return drupal_rmdir($path);
  }
  return file_unmanaged_delete($path);
}