function FileTransfer::copyDirectoryJailed

Same name and namespace in other branches
  1. 7.x includes/filetransfer/filetransfer.inc \FileTransfer::copyDirectoryJailed()
  2. 9 core/lib/Drupal/Core/FileTransfer/FileTransfer.php \Drupal\Core\FileTransfer\FileTransfer::copyDirectoryJailed()
  3. 8.9.x core/lib/Drupal/Core/FileTransfer/FileTransfer.php \Drupal\Core\FileTransfer\FileTransfer::copyDirectoryJailed()
  4. 10 core/lib/Drupal/Core/FileTransfer/FileTransfer.php \Drupal\Core\FileTransfer\FileTransfer::copyDirectoryJailed()

Copies a directory.

We need a separate method to make sure the $destination is in the jail.

Parameters

string $source: The source path.

string $destination: The destination path.

1 call to FileTransfer::copyDirectoryJailed()
FileTransfer::copyDirectory in core/lib/Drupal/Core/FileTransfer/FileTransfer.php
Copies a directory.
1 method overrides FileTransfer::copyDirectoryJailed()
SSH::copyDirectoryJailed in core/lib/Drupal/Core/FileTransfer/SSH.php
Copies a directory.

File

core/lib/Drupal/Core/FileTransfer/FileTransfer.php, line 325

Class

FileTransfer
Defines the base FileTransfer class.

Namespace

Drupal\Core\FileTransfer

Code

protected function copyDirectoryJailed($source, $destination) {
    if ($this->isDirectory($destination)) {
        $destination = $destination . '/' . \Drupal::service('file_system')->basename($source);
    }
    $this->createDirectory($destination);
    foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
        $relative_path = substr($filename, strlen($source));
        if ($file->isDir()) {
            $this->createDirectory($destination . $relative_path);
        }
        else {
            $this->copyFile($file->getPathName(), $destination . $relative_path);
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.