Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Filesystem.php

function Filesystem::doRemove

1 call to Filesystem::doRemove()
Filesystem::remove in vendor/symfony/filesystem/Filesystem.php
Removes files or directories.

File

vendor/symfony/filesystem/Filesystem.php, line 156

Class

Filesystem
Provides basic utility to manipulate the file system.

Namespace

Symfony\Component\Filesystem

Code

private static function doRemove(array $files, bool $isRecursive) : void {
    $files = array_reverse($files);
    foreach ($files as $file) {
        if (is_link($file)) {
            // See https://bugs.php.net/52176
            if (!(self::box('unlink', $file) || '\\' !== \DIRECTORY_SEPARATOR || self::box('rmdir', $file)) && file_exists($file)) {
                throw new IOException(\sprintf('Failed to remove symlink "%s": ', $file) . self::$lastError);
            }
        }
        elseif (is_dir($file)) {
            if (!$isRecursive) {
                $tmpName = \dirname(realpath($file)) . '/.!' . strrev(strtr(base64_encode(random_bytes(2)), '/=', '-!'));
                if (file_exists($tmpName)) {
                    try {
                        self::doRemove([
                            $tmpName,
                        ], true);
                    } catch (IOException) {
                    }
                }
                if (!file_exists($tmpName) && self::box('rename', $file, $tmpName)) {
                    $origFile = $file;
                    $file = $tmpName;
                }
                else {
                    $origFile = null;
                }
            }
            $filesystemIterator = new \FilesystemIterator($file, \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::SKIP_DOTS);
            self::doRemove(iterator_to_array($filesystemIterator, true), true);
            if (!self::box('rmdir', $file) && file_exists($file) && !$isRecursive) {
                $lastError = self::$lastError;
                if (null !== $origFile && self::box('rename', $file, $origFile)) {
                    $file = $origFile;
                }
                throw new IOException(\sprintf('Failed to remove directory "%s": ', $file) . $lastError);
            }
        }
        elseif (!self::box('unlink', $file) && (self::$lastError && str_contains(self::$lastError, 'Permission denied') || file_exists($file))) {
            throw new IOException(\sprintf('Failed to remove file "%s": ', $file) . self::$lastError);
        }
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal