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\FilesystemCode
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);
}
}
}