function fseek($fp, $pos) { Mageplace_Backup_Model_File::fseek($fp, $pos); }
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; }
/** * @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; }
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; }
protected function filesize($handle) { return Mageplace_Backup_Model_File::filesize($handle); }