Example #1
0
 /**
  * Uploads backup file from server to Amazon S3.
  *
  * @param array $args arguments passed to the function
  *                    [as3_bucket_region] -> Amazon S3 bucket region
  *                    [as3_bucket] -> Amazon S3 bucket
  *                    [as3_access_key] -> Amazon S3 access key
  *                    [as3_secure_key] -> Amazon S3 secure key
  *                    [as3_directory] -> folder on user's Amazon S3 account which backup file should be upload to
  *                    [as3_site_folder] -> subfolder with site name in as3_directory which backup file should be upload to
  *                    [backup_file] -> absolute path of backup file on local server
  *
  * @return bool|array true is successful, array with error message if not
  */
 public function amazons3_backup($args)
 {
     if (!mwp_container()->getSystemEnvironment()->isCurlEnabled()) {
         throw new MWP_Worker_Exception(MWP_Worker_Exception::PHP_EXTENSION_REQUIRED_CURL, 'The cURL PHP extension is required for Amazon S3 backup functionality to work. Please, enquire your hosting provider on how to enable that extension.');
     }
     if ($args['as3_site_folder'] == true) {
         $args['as3_directory'] .= '/' . $this->site_name;
     }
     $endpoint = isset($args['as3_bucket_region']) ? $args['as3_bucket_region'] : 's3.amazonaws.com';
     $fileSize = filesize($args['backup_file']);
     $progressSupport = version_compare(PHP_VERSION, '5.3', '>=');
     $start = microtime(true);
     mwp_logger()->info('Uploading backup file to Amazon S3)', array('directory' => $args['as3_directory'], 'bucket' => $args['as3_bucket'], 'endpoint' => $endpoint, 'backup_file' => $args['backup_file'], 'backup_size' => $fileSize, 'progress_support' => $progressSupport ? 'enabled' : 'disabled'));
     try {
         $s3 = new S3_Client(trim($args['as3_access_key']), trim(str_replace(' ', '+', $args['as3_secure_key'])), false, $endpoint);
         $s3->setExceptions(true);
         if ($progressSupport) {
             $progress = new MWP_Progress_Upload(filesize($args['backup_file']), 3, mwp_logger());
             $s3->setProgressCallback($progress->getCallback());
         }
         $s3->putObjectFile($args['backup_file'], $args['as3_bucket'], $args['as3_directory'] . '/' . basename($args['backup_file']), S3_Client::ACL_PRIVATE);
     } catch (Exception $e) {
         mwp_logger()->error('Upload to Amazon S3 failed', array('exception' => $e));
         return array('error' => 'Failed to upload to Amazon S3 (' . $e->getMessage() . ').');
     }
     mwp_logger()->info('Upload to Amazon S3 completed; average speed is {speed}/s', array('speed' => mwp_format_bytes($fileSize / (microtime(true) - $start))));
     return true;
 }