Ejemplo n.º 1
0
 function fseek($fp, $pos)
 {
     Mageplace_Backup_Model_File::fseek($fp, $pos);
 }
Ejemplo n.º 2
0
 public function prepareFileToUpload($size = self::DEFAULT_FILE_PART_SIZE)
 {
     if ($size < 0.001) {
         $size = 0;
     }
     $sizeByte = round($size * 1024 * 1024);
     if (!$sizeByte || Mageplace_Backup_Model_File::filesize($this->getFileLocation()) <= $sizeByte) {
         return array(array('filename' => $this->getFileName(), 'filelocation' => $this->getFileLocation()));
     }
     $this->_addBackupProcessMessage($this->_helper->__('Start splitting "%s" file into parts', $this->getFileName()), Mageplace_Backup_Model_Backup::LOG_LEVEL_INFO);
     $readFilePartSize = $size < self::READ_FILE_PART_SIZE ? self::READ_FILE_PART_SIZE / 1024 : self::READ_FILE_PART_SIZE;
     $counter = 0;
     $return = array();
     $handle = fopen($this->getFileLocation(), 'r');
     while (!feof($handle)) {
         $counter++;
         $filename = $this->getFileName(null, $counter);
         $fileLoc = $this->getPath() . DS . $this->getFileName(null, $counter);
         $sizeCounter = 0;
         $handle_w = fopen($fileLoc, 'a');
         $this->getBackup()->addFilesForDelete($fileLoc);
         $wrote = true;
         do {
             $filePart = fread($handle, $readFilePartSize);
             if (fwrite($handle_w, $filePart) === false) {
                 $wrote = false;
                 break;
             }
             $sizeCounter += $readFilePartSize;
         } while ($sizeCounter < $sizeByte && !feof($handle));
         fclose($handle_w);
         if ($wrote == false) {
             $this->_addBackupProcessMessage($this->_helper->__("Write file \"%s\" error. Split process was stopped.", $fileLoc), Mageplace_Backup_Model_Backup::LOG_LEVEL_WARNING);
             break;
         } else {
             $return[] = array('filename' => $filename, 'filelocation' => $fileLoc);
         }
     }
     fclose($handle);
     $this->setFileParts($counter);
     $this->_addBackupProcessMessage($this->_helper->__('Finish splitting "%s" file into parts', $this->getFileName()), Mageplace_Backup_Model_Backup::LOG_LEVEL_INFO);
     return $return;
 }
Ejemplo n.º 3
0
 /**
  * @param Mageplace_Backup_Model_File $backupFile
  *
  * @return boolean
  */
 public function start($backupFile)
 {
     $sessionTable = $this->getStepTable();
     $sessionRow = $this->getStepRow();
     if ($sessionTable !== null) {
         $checkContinue = false;
     } else {
         $checkContinue = true;
     }
     $resource = $this->getResource();
     $backupFile->openGz(!$checkContinue ? Mageplace_Backup_Model_File::OPEN_MODE_APPEND : Mageplace_Backup_Model_File::OPEN_MODE_WRITE);
     $resource->beginTransaction();
     $excludedTablesRows = $this->getExcludedTablesRows();
     if ($checkContinue) {
         $backupFile->write($resource->getHeader());
     }
     $checkFinish = true;
     $tables = $resource->getTables();
     foreach ($tables as $table) {
         if (!$checkContinue) {
             if ($table != $sessionTable) {
                 continue;
             } else {
                 $checkContinue = true;
             }
         }
         if (!in_array($table, $excludedTablesRows)) {
             if ($sessionTable != $table) {
                 $this->_addBackupProcessMessage($this->_helper->__('Start "%s" table backup', $table));
                 $backupFile->write($resource->getTableHeader($table) . $resource->getTableDropSql($table) . "\n");
                 $backupFile->write($resource->getTableCreateSql($table, false) . PHP_EOL);
             }
             /** @var Varien_Object|boolean $tableStatus */
             $tableStatus = $resource->getTableStatus($table);
             if (is_object($tableStatus) && $tableStatus->getRows()) {
                 if ($sessionTable != $table) {
                     $backupFile->write($resource->getTableDataBeforeSql($table));
                 }
                 if ($sessionTable == $table && $this->getStepLimit() > 0 && $this->getStepLength() > 0) {
                     $limit = $this->getStepLimit();
                     $multiRowsLength = $this->getStepLength();
                 } elseif ($tableStatus->getDataLength() > self::BUFFER_LENGTH) {
                     if ($tableStatus->getAvgRowLength() < self::BUFFER_LENGTH) {
                         $limit = floor(self::BUFFER_LENGTH / $tableStatus->getAvgRowLength());
                         $multiRowsLength = ceil($tableStatus->getRows() / $limit);
                     } else {
                         $limit = 1;
                         $multiRowsLength = $tableStatus->getRows();
                     }
                 } else {
                     $limit = $tableStatus->getRows();
                     $multiRowsLength = 1;
                 }
                 $start = $sessionTable != $table ? 0 : $sessionRow;
                 for ($i = $start; $i < $multiRowsLength; $i++) {
                     if ($this->timeIsUp()) {
                         $this->setStepParams($table, $i, $limit, $multiRowsLength);
                         $checkFinish = false;
                         break 2;
                     }
                     $backupFile->write($resource->getTableDataSql($table, $limit, $i * $limit));
                 }
                 $backupFile->write($resource->getTableDataAfterSql($table));
             }
             $this->_addBackupProcessMessage($this->_helper->__('Finish "%s" table backup', $table));
         } else {
             $backupFile->write($resource->getTableHeader($table));
             $createSql = $resource->getTableCreateSql($table, false) . PHP_EOL;
             $createSql = preg_replace('/(CREATE TABLE)(.*+)/is', '$1 IF NOT EXISTS $2', $createSql);
             $backupFile->write($createSql);
             $this->_addBackupProcessMessage($this->_helper->__('Skip "%s" table rows backup', $table));
         }
         if ($this->timeIsUp() && ($next = next($tables)) && $next !== false) {
             $this->setStepParams($next, 0, 0, 0);
             $checkFinish = false;
             break;
         }
     }
     if ($checkFinish) {
         $backupFile->write($resource->getTableForeignKeysSql());
         $backupFile->write($resource->getFooter());
         $this->setStepParams(null, null, null, null);
     }
     $resource->commitTransaction();
     $backupFile->close();
     return $checkFinish;
 }
Ejemplo n.º 4
0
 public function getDirSize($path, $loop = 0)
 {
     $fileSize = 0;
     $dir = scandir($path);
     foreach ($dir as $file) {
         if ($file != '.' && $file != '..') {
             if (is_link($path . DS . $file)) {
                 continue;
             } elseif (is_dir($path . DS . $file)) {
                 if ($loop >= self::MAX_LOOP) {
                     $this->_loop = true;
                     continue;
                 } else {
                     $fileSize += (double) $this->getDirSize($path . DS . $file, $loop + 1);
                 }
             } else {
                 $fileSize += Mageplace_Backup_Model_File::filesize($path . DS . $file);
             }
         }
     }
     return $fileSize;
 }
Ejemplo n.º 5
0
 protected function filesize($handle)
 {
     return Mageplace_Backup_Model_File::filesize($handle);
 }