function Updater::prepareInstallDirectory

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::prepareInstallDirectory()
  2. 8.9.x core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::prepareInstallDirectory()
  3. 10 core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::prepareInstallDirectory()
  4. 11.x core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::prepareInstallDirectory()

Make sure the installation parent directory exists and is writable.


FileTransfer $filetransfer: Object which is a child of FileTransfer.

string $directory: The installation directory to prepare.

2 calls to Updater::prepareInstallDirectory()
Updater::install in includes/
Installs a Drupal project, returns a list of next actions.
Updater::update in includes/
Updates a Drupal project, returns a list of next actions.


includes/, line 318


Base class for Updaters used in Drupal.


public function prepareInstallDirectory(&$filetransfer, $directory) {
    // Make the parent dir writable if need be and create the dir.
    if (!is_dir($directory)) {
        $parent_dir = dirname($directory);
        if (!is_writable($parent_dir)) {
            @chmod($parent_dir, 0755);
            // It is expected that this will fail if the directory is owned by the
            // FTP user. If the FTP user == web server, it will succeed.
            try {
                $this->makeWorldReadable($filetransfer, $directory);
            } catch (FileTransferException $e) {
                // Probably still not writable. Try to chmod and do it again.
                // @todo: Make a new exception class so we can catch it differently.
                try {
                    $old_perms = substr(sprintf('%o', fileperms($parent_dir)), -4);
                    $filetransfer->chmod($parent_dir, 0755);
                    $this->makeWorldReadable($filetransfer, $directory);
                    // Put the permissions back.
                    $filetransfer->chmod($parent_dir, intval($old_perms, 8));
                } catch (FileTransferException $e) {
                    $message = t($e->getMessage(), $e->arguments);
                    $throw_message = t('Unable to create %directory due to the following: %reason', array(
                        '%directory' => $directory,
                        '%reason' => $message,
                    throw new UpdaterException($throw_message);
            // Put the parent directory back.
            @chmod($parent_dir, 0555);

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