public function Updater::prepareInstallDirectory

public Updater::prepareInstallDirectory(&$filetransfer, $directory)

Makes sure the installation parent directory exists and is writable.

Parameters

\Drupal\Core\FileTransfer\FileTransfer $filetransfer: Object which is a child of FileTransfer.

string $directory: The installation directory to prepare.

Throws

\Drupal\Core\Updater\UpdaterException

File

core/lib/Drupal/Core/Updater/Updater.php, line 304

Class

Updater
Defines the base class for Updaters used in Drupal.

Namespace

Drupal\Core\Updater

Code

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 {
        $filetransfer->createDirectory($directory);
        $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);
          $filetransfer->createDirectory($directory);
          $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);
    }
  }
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Updater!Updater.php/function/Updater::prepareInstallDirectory/8.1.x