예제 #1
0
 /**
  * Extract all files to the given directory.
  *
  * @param $directory
  * @return mixed
  */
 public function extractTo($directory)
 {
     $this->archive->openForRead(true);
     $result = $this->extractAllToDirectory($directory);
     $this->archive->close();
     return $result;
 }
예제 #2
0
 /**
  * {@inheritdoc}
  */
 function saveFile(BackupFileReadableInterface $file)
 {
     $stream_uri = $this->confGet('streamuri');
     if ($fp_out = fopen($stream_uri, 'w')) {
         $file->openForRead();
         while ($data = $file->readBytes(1024 * 512)) {
             fwrite($fp_out, $data);
         }
         fclose($fp_out);
         $file->close();
     } else {
         throw new \Exception("Cannot open the file {$stream_uri} for writing");
     }
 }
예제 #3
0
 /**
  * {@inheritdoc}
  */
 function saveFile(BackupFileReadableInterface $file)
 {
     // Set some default download headers.
     $headers = array(array('key' => 'Content-Disposition', 'value' => 'attachment; filename="' . $file->getFullName() . '"'), array('key' => 'Cache-Control', 'value' => 'no-cache'));
     // Set a mime-type header.
     if ($mime = $file->getMeta('mimetype')) {
         $headers[] = array('key' => 'Content-Type', 'value' => $mime);
     } else {
         // Get the mime type for this file if possible
         $mime = 'application/octet-stream';
         $mime = $this->plugins()->call('alterMime', $mime, array('ext' => $file->getExtLast()));
         $headers[] = array('key' => 'Content-Type', 'value' => $mime);
     }
     // In some circumstances, web-servers will double compress gzipped files.
     // This may help aleviate that issue by disabling mod-deflate.
     if ($file->getMeta('mimetype') == 'application/x-gzip') {
         if (function_exists('apache_setenv')) {
             apache_setenv('no-gzip', '1');
         }
         $headers[] = array('key' => 'Content-Encoding', 'value' => 'gzip');
     }
     if ($size = $file->getMeta('filesize')) {
         $headers[] = array('key' => 'Content-Length', 'value' => $size);
     }
     // Suppress the warning you get when the buffer is empty.
     @ob_end_clean();
     if ($file->openForRead()) {
         foreach ($headers as $header) {
             // To prevent HTTP header injection, we delete new lines that are
             // not followed by a space or a tab.
             // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
             $header['value'] = preg_replace('/\\r?\\n(?!\\t| )/', '', $header['value']);
             header($header['key'] . ': ' . $header['value']);
         }
         // Transfer file in 1024 byte chunks to save memory usage.
         while ($data = $file->readBytes(1024 * 512)) {
             print $data;
         }
         $file->close();
     }
     // @TODO Throw exception.
 }
예제 #4
0
 /**
  * Import to this source from the given backup file. This is the main restore
  * function for this source.
  *
  * @param \BackupMigrate\Core\File\BackupFileReadableInterface $file
  *    The file to read the backup from. It will not be opened for reading
  * @return bool|int
  */
 public function importFromFile(BackupFileReadableInterface $file)
 {
     $num = 0;
     if ($conn = $this->_getConnection()) {
         // Open (or rewind) the file.
         $file->openForRead();
         // Read one line at a time and run the query.
         while ($line = $this->_readSQLCommand($file)) {
             //        if (_backup_migrate_check_timeout()) {
             //          return FALSE;
             //        }
             if ($line) {
                 // Execute the sql query from the file.
                 $conn->query($line);
                 $num++;
             }
         }
         // Close the file, we're done reading it.
         $file->close();
     }
     return $num;
 }
예제 #5
0
 /**
  * {@inheritdoc}
  */
 function saveFile(BackupFileReadableInterface $file)
 {
     $out = array();
     // Quick and dirty way to html format this output
     if ($this->confGet('format') == 'html') {
         print '<pre>';
     }
     // Output the metadata
     if ($this->confGet('showmeta')) {
         print "---------------------\n";
         print "Metadata: \n";
         print_r($file->getMetaAll());
         print "---------------------\n";
     }
     // Output the body
     if ($this->confGet('showbody')) {
         print "---------------------\n";
         print "Body: \n";
         $max = $this->confGet('maxbody');
         $chunk = min($max, 1024);
         if ($file->openForRead()) {
             // Transfer file in 1024 byte chunks to save memory usage.
             while ($max > 0 && ($data = $file->readBytes($chunk))) {
                 print $data;
                 $max -= $chunk;
             }
             $file->close();
         }
         print "---------------------\n";
     }
     // Quick and dirty way to html format this output
     if ($this->confGet('format') == 'html') {
         print '</pre>';
     }
     exit;
 }
예제 #6
0
 /**
  * BZip encode a file.
  *
  * @param \BackupMigrate\Core\File\BackupFileReadableInterface $from
  * @param \BackupMigrate\Core\File\BackupFileWritableInterface $to
  * @return bool
  */
 protected function _bzipEncode(BackupFileReadableInterface $from, BackupFileWritableInterface $to)
 {
     $success = FALSE;
     if (!$success && function_exists("bzopen")) {
         if (($fp_out = bzopen($to->realpath(), 'w')) && $from->openForRead()) {
             while ($data = $from->readBytes(1024 * 512)) {
                 bzwrite($fp_out, $data);
             }
             $success = TRUE;
             $from->close();
             bzclose($fp_out);
         }
     }
     return $success;
 }