protected function DrupalDirectoryDestination::checkDirectory in Backup and Migrate 8.4
Check that the directory can be used for backup.
Throws
\BackupMigrate\Core\Exception\BackupMigrateException
Overrides DirectoryDestination::checkDirectory
1 call to DrupalDirectoryDestination::checkDirectory()
- DrupalDirectoryDestination::_saveFile in src/
Destination/ DrupalDirectoryDestination.php - Do the actual file save. This function is called to save the data file AND the metadata sidecar file.
File
- src/
Destination/ DrupalDirectoryDestination.php, line 41
Class
- DrupalDirectoryDestination
- Class DrupalDirectoryDestination.
Namespace
BackupMigrate\Drupal\DestinationCode
protected function checkDirectory() {
// @TODO: Figure out if the file is or might be accessible via the web.
$dir = $this
->confGet('directory');
$is_private = strpos($dir, 'private://') === 0;
// Attempt to create/prepare the directory if it is in the private directory.
if ($is_private) {
if (!PrivateStream::basePath()) {
throw new BackupMigrateException("The backup file could not be saved to '%dir' because your private files system path has not been set.", [
'%dir' => $dir,
]);
}
if (!file_prepare_directory($dir, FILE_CREATE_DIRECTORY && FILE_MODIFY_PERMISSIONS)) {
throw new BackupMigrateException("The backup file could not be saved to '%dir' because the directory could not be created or cannot be written to. Please make sure your private files directory is writable by the web server.", [
'%dir' => $dir,
]);
}
}
else {
// If the file is local to the server.
$real = \Drupal::service('file_system')
->realpath($dir);
if ($real) {
// If the file is within the docroot.
$in_root = strpos($real, DRUPAL_ROOT) === 0;
if ($in_root) {
throw new BackupMigrateException("The backup file could not be saved to '%dir' because that directory may be publicly accessible via the web. Please save your backups to the private file directory or a directory outside of the web root.", [
'%dir' => $dir,
]);
}
}
}
// Do the regular exists/writable checks.
parent::checkDirectory();
// @TODO: Warn if the realpath cannot be resolved (because we cannot determine if the file is publicly accessible)
}