diff --git a/app/api/CronApi.php b/app/api/CronApi.php index 1f5adf2..58a0404 100644 --- a/app/api/CronApi.php +++ b/app/api/CronApi.php @@ -13,6 +13,13 @@ class CronApi extends ApiController { echo (new OpenWeatherMap)->fetch(''); echo (new UsaElection)->fetch(''); + // Database Backup + $filenames = []; + $backupWorker = new DatabaseBackup; + $filenames[] = $backupWorker->scheme(); + $filenames[] = $backupWorker->data(); + $backupWorker->compress($_SERVER['DOCUMENT_ROOT'] . BASEDIR . '/backup/'.date("Y-m-d", time()).'.zip', $filenames); + $this->response(['Value' => 'OK']); } } diff --git a/app/plugins/DatabaseBackup.php b/app/plugins/DatabaseBackup.php new file mode 100644 index 0000000..8533034 --- /dev/null +++ b/app/plugins/DatabaseBackup.php @@ -0,0 +1,34 @@ +&1"; + $this->executeCommand($command); + return $backupfile; + } + + public function data(){ + $backupfile = $_SERVER['DOCUMENT_ROOT'] . BASEDIR ."/backup/" . DBNAME.'_data_'.date("Y-m-d", time()).'.sql'; + $command = "mysqldump --skip-comments --no-data -h localhost -u ". DBUSER . " -p" . DBPASS ." ". DBNAME ." -r $backupfile 2>&1"; + $this->executeCommand($command); + return $backupfile; + } + + private function executeCommand($command){ + ini_set('date.timezone', 'Europe/Prague'); + exec($command); + } + + public function compress($filename, $files = []) { + $zip = new ZipArchive(); + if($zip->open($filename,ZipArchive::CREATE|ZipArchive::OVERWRITE)) { + foreach ($files as $file) { + $zip->addFile($file); + } + echo $zip->close(); + foreach ($files as $file) { + unlink($file); + } + } + } +}