If a file with the same name exist and is writable, it is replaced
by the new tar.
The method return false and a PEAR error text.
The $p_filelist parameter can be an array of string, each string
representing a filename or a directory name with their path if
needed. It can also be a single string with names separated by a
single blank.
For each directory added in the archive, the files and
sub-directories are also added.
See also createModify() method for more details.
protected function getArchive() { $obj = new Archive_Tar($this->getBackupFile()); if (!is_file($this->getBackupFile())) { $files = array(); if (!$obj->create($files)) { echo "can't create archive"; } } return $obj; }
function _generateTarFile($compress = true) { $pkgver = (string) $this->xml->name . '-' . (string) $this->xml->version->release; $targetdir = !empty($this->options['targetdir']) ? $this->options['targetdir'] . DIRECTORY_SEPARATOR : ''; $tarname = $targetdir . $pkgver . ($compress ? '.tgz' : '.tar'); $tar = new Archive_Tar($tarname, $compress); $tar->setErrorHandling(PEAR_ERROR_RETURN); $result = $tar->create(array($this->pkginfofile)); if (PEAR::isError($result)) { return $this->raiseError($result); } foreach ($this->files as $roleDir => $files) { $result = $tar->addModify($files, $pkgver, $roleDir); } if (PEAR::isError($result)) { return $this->raiseError($result); } $this->output .= 'Successfully created ' . $tarname . "\n"; return true; }
function lfCreateBkupData($bkup_name) { $objQuery = new SC_Query(); $csv_data = ""; $csv_autoinc = ""; $err = true; $bkup_dir = $this->bkup_dir; if (!is_dir(dirname($bkup_dir))) { $err = mkdir(dirname($bkup_dir)); } $bkup_dir = $bkup_dir . $bkup_name . "/"; // 全テーブル取得 $arrTableList = $this->lfGetTableList(); // 各テーブル情報を取得する foreach ($arrTableList as $key => $val) { if (!($val == "dtb_bkup" || $val == "mtb_zip")) { // 自動採番型の構成を取得する $csv_autoinc .= $this->lfGetAutoIncrement($val); // 全データを取得 if ($val == "dtb_pagelayout") { $arrData = $objQuery->getAll("SELECT * FROM {$val} ORDER BY page_id"); } else { $arrData = $objQuery->getAll("SELECT * FROM {$val}"); } // CSVデータ生成 if (count($arrData) > 0) { // カラムをCSV形式に整える $arrKyes = SC_Utils_Ex::sfGetCommaList(array_keys($arrData[0]), false); // データをCSV形式に整える $data = ""; foreach ($arrData as $data_key => $data_val) { //$val = str_replace("\"", "\\\"", $val); $data .= $this->lfGetCSVList($arrData[$data_key]); } // CSV出力データ生成 $csv_data .= $val . "\r\n"; $csv_data .= $arrKyes . "\r\n"; $csv_data .= $data; $csv_data .= "\r\n"; } // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } } $csv_file = $bkup_dir . "bkup_data.csv"; $csv_autoinc_file = $bkup_dir . "autoinc_data.csv"; mb_internal_encoding(CHAR_CODE); // CSV出力 // ディレクトリが存在していなければ作成する if (!is_dir(dirname($csv_file))) { $err = mkdir(dirname($csv_file)); } if ($err) { // dataをCSV出力 $fp = fopen($csv_file, "w"); if ($fp) { if ($csv_data != "") { $err = fwrite($fp, $csv_data); } fclose($fp); } // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, "w"); if ($fp) { if ($csv_autoinc != "") { $err = fwrite($fp, $csv_autoinc); } fclose($fp); } } // 各種ファイルコピー if ($err) { /** // 商品画像ファイルをコピー // ディレクトリが存在していなければ作成する $image_dir = $bkup_dir . "save_image/"; if (!is_dir(dirname($image_dir))) $err = mkdir(dirname($image_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../upload/save_image/",$image_dir, $copy_mess); // テンプレートファイルをコピー // ディレクトリが存在していなければ作成する $templates_dir = $bkup_dir . "templates/"; if (!is_dir(dirname($templates_dir))) $err = mkdir(dirname($templates_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/templates/",$templates_dir, $copy_mess); // インクルードファイルをコピー // ディレクトリが存在していなければ作成する $inc_dir = $bkup_dir . "include/"; if (!is_dir(dirname($inc_dir))) $err = mkdir(dirname($inc_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/include/",$inc_dir, $copy_mess); // CSSファイルをコピー // ディレクトリが存在していなければ作成する $css_dir = $bkup_dir . "css/"; if (!is_dir(dirname($css_dir))) $err = mkdir(dirname($css_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/css/",$css_dir, $copy_mess); **/ //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . ".tar.gz", TRUE); //bkupフォルダに移動する chdir($this->bkup_dir); //圧縮をおこなう $zip = $tar->create("./" . $bkup_name . "/"); // バックアップデータの削除 if ($zip) { SC_Utils_Ex::sfDelFile($bkup_dir); } } if (!$err) { $arrErr['bkup_name'] = "バックアップに失敗しました。"; // バックアップデータの削除 SC_Utils_Ex::sfDelFile($bkup_dir); } return isset($arrErr) ? $arrErr : array(); }
public static function archiveAndSendExportFile() { $export_files_dir = SJB_System::getSystemSettings("EXPORT_FILES_DIRECTORY"); if (empty($export_files_dir)) { return; } $archive_file_path = SJB_Path::combine($export_files_dir, "users.tar.gz"); $old_path = getcwd(); chdir($export_files_dir); $tar = new Archive_Tar('users.tar.gz', 'gz'); $tar->create("files video pictures users.xls"); chdir($old_path); for ($i = 0; $i < ob_get_level(); $i++) { ob_end_clean(); } header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=users.tar.gz"); header("Content-Length: " . filesize($archive_file_path)); readfile($archive_file_path); SJB_Filesystem::delete($export_files_dir); }
/** * バックアップファイル作成. * * @param string $bkup_name * @return boolean|int 結果。true:成功 int:失敗 FIXME 本来は int ではなく、エラーメッセージを戻すべき */ function lfCreateBkupData($bkup_name, $work_dir) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $csv_autoinc = ''; $arrData = array(); $success = mkdir($work_dir, 0777, true); if (!$success) { return __LINE__; } // 全テーブル取得 $arrTableList = $objQuery->listTables(); // 各テーブル情報を取得する foreach ($arrTableList as $table) { if ($table == 'dtb_bkup' || $table == 'mtb_zip') { continue; } // dataをCSV出力 $csv_file = $work_dir . $table . '.csv'; $fp = fopen($csv_file, 'w'); if (!$fp) { return __LINE__; } // 全データを取得 $sql = "SELECT * FROM {$table}"; $this->fpOutput =& $fp; $this->first_line = true; $success = $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql); unset($this->fpOutput); if ($success === false) { return __LINE__; } fclose($fp); // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } // 自動採番型の構成を取得する $csv_autoinc = $this->lfGetAutoIncrement(); $csv_autoinc_file = $work_dir . 'autoinc_data.csv'; // CSV出力 // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, 'w'); if ($fp) { if ($csv_autoinc != '') { $success = fwrite($fp, $csv_autoinc); if (!$success) { return __LINE__; } } fclose($fp); } //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE); //bkupフォルダに移動する chdir($work_dir); //圧縮をおこなう $zip = $tar->create('./'); return true; }
/** * ユーザが作成したファイルをアーカイブしダウンロードさせる * TODO 要リファクタリング * @param string $dir アーカイブを行なうディレクトリ * @param string $template_code テンプレートコード * @return boolean 成功した場合 true; 失敗した場合 false */ function downloadArchiveFiles($dir, $template_code) { // ダウンロードされるファイル名 $dlFileName = 'tpl_package_' . $template_code . '_' . date('YmdHis') . '.tar.gz'; $debug_message = $dir . ' から ' . $dlFileName . " を作成します...\n"; // ファイル一覧取得 $arrFileHash = SC_Helper_FileManager_Ex::sfGetFileList($dir); $arrFileList = array(); foreach ($arrFileHash as $val) { $arrFileList[] = $val['file_name']; $debug_message .= '圧縮:' . $val['file_name'] . "\n"; } GC_Utils_Ex::gfPrintLog($debug_message); // ディレクトリを移動 chdir($dir); // 圧縮をおこなう $tar = new Archive_Tar($dlFileName, true); if ($tar->create($arrFileList)) { // ダウンロード用HTTPヘッダ出力 header("Content-disposition: attachment; filename={$dlFileName}"); header("Content-type: application/octet-stream; name={$dlFileName}"); header('Cache-Control: '); header('Pragma: '); readfile($dlFileName); unlink($dir . '/' . $dlFileName); return true; } else { return false; } }
function createPatch($updatecache = false) { include_once "Lib/Archive/Tar.php"; include_once 'Lib/Text/Diff.php'; include_once 'Lib/Text/Diff/Renderer/unified.php'; $start = microtime(true); $tar_object = new Archive_Tar(_bmoddir . "Data/Cache.tar"); $tar_object->setErrorHandling(PEAR_ERROR_PRINT); $tardata = $tar_object->listContent(); $working = checkDir2(""); $fmerged = array_merge($tardata, $working); $tarf_db = reIndexByFile($tardata); $work_db = reIndexByFile($working); $workidx = indexFilename($working); $tar_idx = indexFilename($tardata); $f_names = array_unique(array_merge($workidx, $tar_idx)); $out = ""; foreach ($f_names as $file) { //speed optimization if ($tarf_db[$file] && $work_db[$file] && $tarf_db[$file]["mtime"] == $work_db[$file]["mtime"] && $updatecache != true) { continue; } if ($tarf_db[$file]) { $fts1 = $tarf_db[$file]["mtime"]; $fdata = $tar_object->extractInString($file); $lines1 = explode("\n", $fdata); //$lines1 = file("Data/$file"); if (substr($fdata, -1, 1) == "\n") { //$lines1[] = ""; } } else { $fts1 = 0; $lines1 = array(); } if ($work_db[$file]) { $fts2 = $work_db[$file]["mtime"]; //$lines2 = file(_bpatdir."$file"); $filetext = file_get_contents(_bmoddir . _bpatdir . "{$file}"); $lines2 = explode("\n", $filetext); } else { $fts2 = 0; $lines2 = array(); $filetext = ""; } if (array_search($file, $workidx) === false && array_search($file, $tar_idx) !== false) { //delted file $out .= renderHeader($file, $fts1, $fts2); $out .= "@@ -0,0 @@\n\n"; continue; } if (array_search($file, $workidx) !== false && array_search($file, $tar_idx) === false) { //added file } if ($filetext == $fdata) { continue; } $diff = new Text_Diff('auto', array($lines1, $lines2)); $renderer = new Text_Diff_Renderer_unified(); $render = $renderer->render($diff); if ($render != "") { $out .= renderHeader($file, $fts1, $fts2); //get ts to work! $out .= $render . "\n"; if (substr($filetext, -1, 1) != "\n") { $out .= "\\ No newline at end of file\n\n"; } } } if ($updatecache == true) { $tar_object->create(array()); foreach ($f_names as $file) { $tar_object->addString($file, file_get_contents(_bmoddir . _bpatdir . "{$file}")); } } return array(microtime(true) - $start, $out, count($addlist)); }
function download_scenarios($aSims) { // Define the PEAR installation path require_once MAX_PATH . '/lib/pear/Archive/Tar.php'; $oTar = new Archive_Tar(TMP_PATH . '/scenarios.tar.gz'); $aResult = array(); $aFiles = ''; foreach ($aSims as $k => $v) { $aData = get_simulation_file_list(SCENARIOS_DATASETS, '', false, $k); foreach ($aData as $k1 => $v1) { $aFiles .= FOLDER_DATA . '/' . $v1 . ' '; } $aFiles .= FOLDER_SAVE . '/' . $k . '.php '; } $tmpdir = getcwd(); chdir(SIM_PATH); $oTar->create($aFiles); $aResult = $oTar->listContent(); chdir($tmpdir); return 'scenarios.tar.gz'; }
/** * バックアップファイル作成. * * @param string $bkup_name * @param string $work_dir * @return boolean|int 結果。true:成功 int:失敗 FIXME 本来は int ではなく、エラーメッセージを戻すべき */ public function lfCreateBkupData($bkup_name, $work_dir) { $objQuery = Application::alias('eccube.query'); $csv_autoinc = ''; $arrData = array(); $success = mkdir($work_dir, 0777, true); if (!$success) { return __LINE__; } // 全テーブル取得 $arrTableList = $objQuery->listTables(); // 各テーブル情報を取得する foreach ($arrTableList as $table) { if ($table == 'dtb_bkup' || $table == 'mtb_zip') { continue; } // dataをCSV出力 $csv_file = $work_dir . $table . '.csv'; $this->fpOutput = fopen($csv_file, 'w'); if (!$this->fpOutput) { return __LINE__; } // 全データを取得 $sql = 'SELECT * FROM ' . $objQuery->conn->quoteIdentifier($table); $this->output_header = true; $success = $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql); fclose($this->fpOutput); if ($success === false) { return __LINE__; } // タイムアウトを防ぐ Utils::sfFlush(); } // 自動採番型の構成を取得する $csv_autoinc = $this->lfGetAutoIncrement(); $csv_autoinc_file = $work_dir . 'autoinc_data.csv'; // CSV出力 // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, 'w'); if ($fp) { if ($csv_autoinc != '') { $success = fwrite($fp, $csv_autoinc); if (!$success) { return __LINE__; } } fclose($fp); } //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE); //bkupフォルダに移動する chdir($work_dir); //圧縮をおこなう $zip = $tar->create('./'); return true; }
fclose($file); // For the array $i++; } // Now for the directories (and files within them) in the project // This requires a 2nd SQL query due to the nature of creating directories in the archive, it'll get messed up if we try // to do it with 1 loop $query = "SELECT directories.directory, files.filename, files.extension, files.content FROM files, directories WHERE files.project_id = '{$project_id}' AND files.directory_id IS NOT NULL AND directories.directory_id = files.directory_id"; $result = mysql_query($query); while ($fileinfo = mysql_fetch_assoc($result)) { // If the directory doesn't exist, create it! if (!file_exists("/tmp/" . $fileinfo['directory'] . "/")) { mkdir("/tmp/" . $fileinfo['directory'] . "/"); } // Build the filename $filename = "/tmp/" . $fileinfo['directory'] . "/" . $fileinfo['filename'] . "." . $fileinfo['extension']; // Create the file and put the information into it! $file = fopen($filename, "w"); fwrite($file, $fileinfo['content']); // Add the file to the array which will be loaded into the archive $filearray[$i] = $filename; fclose($file); // For the array $i++; } // build archive $tar->create($filearray) or die("Could not create archive!"); // Load the tar into memory $tar = fopen("/tmp/" . $project_id . ".tar", "r"); echo fread($tar, filesize("/tmp/" . $project_id . ".tar")); }
echo "<pre>{$line}</pre>"; } } } $superstart = microtime(true); if (file_exists("Data/database.txt")) { $status = file_get_contents("Data/database.txt"); } else { $status = ""; } include "functions.php"; $act = $_REQUEST['act']; if ($act == "start") { include_once "Lib/Archive/Tar.php"; $tar_object = new Archive_Tar("Data/Cache.tar"); $tar_object->create(array()); createPatch(true); file_put_contents("Data/database.txt", "develop"); header("location: " . basename(__FILE__)); } elseif ($act == "stop") { $dat = createPatch(); $name = $_REQUEST['pname']; $ver = $_REQUEST['pver']; $sum = $_REQUEST['psum']; if ($name && $ver && $sum) { file_put_contents("Data/database.txt", ""); $fn = "mod_" . $_REQUEST['pname'] . "_v" . $_REQUEST['pver']; file_put_contents("Data/{$fn}.patch", "fn={$fn}\nname={$name}\nversion={$ver}\nsummary={$sum}\n\n" . $dat[1]); echo "Done! Your package can be found in your Data/ directory as <a href='Data/{$fn}.patch'>{$fn}.patch</a>"; } else { echo "Error! Form not complete! Please go <a href='?act=finish'>back</a> and repeat the form";
$error = __("Could not create directory %s.", $incoming_pkgdir); } rename($pkg_dir, $incoming_pkgdir . "/" . $pkg_name); } else { $error = __("You are not allowed to overwrite the %h%s%h package.", "<b>", $pkg_name, "</b>"); } } # Re-tar the package for consistency's sake if (!$error) { if (!@chdir($incoming_pkgdir)) { $error = __("Could not change directory to %s.", $incoming_pkgdir); } } if (!$error) { $tar = new Archive_Tar($pkg_name . '.tar.gz'); $create = $tar->create(array($pkg_name)); if (!$create) { $error = __("Could not re-tar"); } } # Chmod files after everything has been done. if (!$error && !chmod_group($incoming_pkgdir)) { $error = __("Could not chmod directory %s.", $incoming_pkgdir); } # Whether it failed or not we can clean this out if (file_exists($tempdir)) { rm_rf($tempdir); } # Update the backend database if (!$error) { $dbh = db_connect();
function tar($aszSource, $szDestination) { // include file include COMMON . "/tar/tar.php"; // specify filename for output file $tar = new Archive_Tar($szDestination); // build archive if (!$tar->create($aszSource)) { return false; } else { return true; } }
private function createTar($backupdir, $backupLocation, $filename) { set_include_path(get_include_path() . PATH_SEPARATOR . Mage::getBaseDir('app') . '/code/community/Aschroder/CloudBackup/lib/'); require_once 'Archive/Tar.php'; $files = scandir($backupdir); // remove . and .. $files = array_diff($files, array(".", "..")); if ($exclude = Mage::helper('cloudbackup')->getExclude()) { $this->log("Excluding: " . $exclude); $files = array_diff($files, explode(",", $exclude)); } // Sometimes the store basedir will not be the CWD, // so make our urls absolute for Archive_Tar $abs_files = array(); foreach ($files as $file) { $abs_files[] = $backupdir . DS . $file; } $this->log("Backing up: " . print_r($abs_files, true)); $tar = new Archive_Tar($backupLocation . DS . $filename, "gz"); if ($tar->create($abs_files)) { $this->log("Backup complete"); } else { $this->log("Could not create backup file: " . $filename); throw new Exception("Could not write Backup Tar File: " . $filename); } }
function packSPK($dir, $destPackage) { $oldDir = getcwd(); chdir($dir); // echo "create $dir to $destPackage"; $package = new Archive_Tar("package.tgz", "gz"); $package->setErrorHandling(PEAR_ERROR_PRINT); $package->create("package"); $destPackage = new Archive_Tar($destPackage); $destPackage->create("INFO scripts package.tgz"); @unlink("package.tgz"); chdir($oldDir); }
function nc_tgz_create($archive_name, $file_name, $additional_path = '', $exclude_tag = NULL) { global $DOCUMENT_ROOT, $SUB_FOLDER; @set_time_limit(0); $path = $DOCUMENT_ROOT . $SUB_FOLDER . $additional_path; if (SYSTEM_TAR) { $exclude_tag_cmd = ''; if ($exclude_tag) { $exclude_array_tmp = nc_exclude_tag_to_array($path, $exclude_tag); $exclude_array = array(); foreach ($exclude_array_tmp as $item) { $exclude_array[] = '--exclude=' . preg_quote(ltrim(substr($item, strlen($path)), '/')); } $exclude_tag_cmd = implode(' ', $exclude_array); } exec("cd {$path}; tar -zcf '{$archive_name}' {$exclude_tag_cmd} {$file_name} 2>&1", $output, $err_code); if ($err_code) { trigger_error("{$output['0']}", E_USER_WARNING); return false; } return true; } else { $tar_object = new Archive_Tar($archive_name, "gz"); $tar_object->setErrorHandling(PEAR_ERROR_PRINT); if ($exclude_tag) { $exclude_array_tmp = nc_exclude_tag_to_array($path, $exclude_tag); $exclude_array = array(); foreach ($exclude_array_tmp as $item) { $exclude_array[] = ltrim(substr($item, strlen($path)), '/'); } $tar_object->setIgnoreList($exclude_array); } chdir($path); ob_start(); $file_name_array = explode(' ', $file_name); $res = $tar_object->create($file_name_array); if (!$res) { ob_end_flush(); } else { ob_end_clean(); } return $res; } }
/** * ユーザが作成したファイルをアーカイブしダウンロードさせる * TODO 要リファクタリング * @param void * @return void */ function downloadArchiveFiles($dir) { $debug_message = ""; // ダウンロードされるファイル名 $dlFileName = 'tpl_package_' . date('YmdHis') . '.tar.gz'; // ファイル一覧取得 $arrFileHash = SC_Utils::sfGetFileList($dir); foreach ($arrFileHash as $val) { $arrFileList[] = $val['file_name']; $debug_message .= "圧縮:" . $val['file_name'] . "\n"; } GC_Utils::gfDebugLog($debug_message); // ディレクトリを移動 chdir($dir); // 圧縮をおこなう $tar = new Archive_Tar($dlFileName, true); $tar->create($arrFileList); // ダウンロード用HTTPヘッダ出力 header("Content-disposition: attachment; filename={$dlFileName}"); header("Content-type: application/octet-stream; name={$dlFileName}"); header("Content-Length: " . filesize($dlFileName)); readfile($dlFileName); unlink($dir . "/" . $dlFileName); exit; }
/** * pack all images, use PEAR Archive_Tar for archive. * * @access public * * @param string $uploadDirectory path to images * @param string $dbname database name * @param int $cityid city ID * * @return string path to created archive or false if not created */ public function tarFiles($directory, $dbname, $cityid) { $swiftEnabled = WikiFactory::getVarValueByName('wgEnableSwiftFileBackend', $cityid); $wgUploadPath = WikiFactory::getVarValueByName('wgUploadPath', $cityid); if ($swiftEnabled) { // sync Swift container to the local directory $directory = sprintf("/tmp/images/{$dbname}/"); $path = trim(parse_url($wgUploadPath, PHP_URL_PATH), '/'); $container = substr($path, 0, -7); // eg. poznan/pl $this->log(sprintf('Rsyncing images from "%s" Swift storage to "%s"...', $container, $directory)); wfMkdirParents($directory); $time = wfTime(); // s3cmd sync --dry-run s3://dilbert ~/images/dilbert/ --exclude "/thumb/*" --exclude "/temp/*" $cmd = sprintf('sudo /usr/bin/s3cmd -c %s sync s3://%s/images "%s" --exclude "/thumb/*" --exclude "/temp/*"', '/etc/s3cmd/sjc_prod.cfg', $container, $directory); wfShellExec($cmd, $iStatus); $time = Wikia::timeDuration(wfTime() - $time); Wikia::log(__METHOD__, "info", "Rsync to {$directory} from {$container} Swift storage: status: {$iStatus}, time: {$time}", true, true); } /** * @name dumpfile */ $tarfile = sprintf("/tmp/{$dbname}_images.tar"); if (file_exists($tarfile)) { @unlink($tarfile); } $tar = new Archive_Tar($tarfile); if (!$tar) { $this->log("Cannot open {$tarfile}"); echo "Cannot open {$tarfile}"; die(1); } $files = $this->getDirTree($directory); if (is_array($files) && count($files)) { $this->log(sprintf("Packing %d files from {$directory} to {$tarfile}", count($files))); $tar->create($files); $result = $tarfile; } else { $this->log("List of files in {$directory} is empty"); $result = false; } return $result; }
function backup_interface() { global $serendipity; $BACKUPDIR = $this->get_config('abspath_backupdir'); $TEMPDIR = $BACKUPDIR . "/tmp"; $ARCHIVDIR = $BACKUPDIR; $TITLE = ""; $TITLE .= "<h2>" . PLUGIN_BACKUP_TITLE . "</h2>\n"; $TITLE .= PLUGIN_BACKUP_DESC . "<br /><br />\n"; if (!file_exists($BACKUPDIR)) { @mkdir($BACKUPDIR, 0777); @chmod($BACKUPDIR, 0777); } if (!file_exists($BACKUPDIR . "/tmp")) { @mkdir($BACKUPDIR . "/tmp", 0777); @chmod($BACKUPDIR . "/tmp", 0777); } if (!file_exists($BACKUPDIR . "/tmp/last_backup")) { @mkdir($BACKUPDIR . "/tmp/last_backup", 0777); @chmod($BACKUPDIR . "/tmp/last_backup", 0777); } if (isset($serendipity['POST']['action']) && $serendipity['POST']['action'] == "makesqlbackup") { $STATUSMSG = ''; unset($UPDATECONF); if (!isset($serendipity['POST']['complete']) || $serendipity['POST']['complete'] != 1) { $serendipity['POST']['complete'] = 0; } if (!isset($serendipity['POST']['drop']) || $serendipity['POST']['drop'] != 1) { $serendipity['POST']['drop'] = 0; } if (!isset($serendipity['POST']['pack']) || $serendipity['POST']['pack'] != 1) { $serendipity['POST']['pack'] = 0; } $DATA_BACKUP = $serendipity['POST']['complete']; $DATA_BACKUP .= "|^|"; $DATA_BACKUP .= isset($serendipity['POST']['complete']) && $serendipity['POST']['complete'] == 1 ? serialize(array()) : serialize($serendipity['POST']['tables']); $DATA_BACKUP .= "|^|"; $DATA_BACKUP .= $serendipity['POST']['data']; $DATA_BACKUP .= "|^|"; $DATA_BACKUP .= $serendipity['POST']['drop']; $DATA_BACKUP .= "|^|"; $DATA_BACKUP .= $serendipity['POST']['pack']; if (!isset($serendipity['POST']['delete']) && isset($serendipity['POST']['bakautomatik']) && $serendipity['POST']['bakautomatik'] == 1) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_sqlbackup SET "; $UPDATECONF .= "\t\tauto_backup='1', "; $UPDATECONF .= "\t\ttime_backup='" . $serendipity['POST']['interval'] . "', "; $UPDATECONF .= "\t\tlast_backup='" . time() . "', "; $UPDATECONF .= "\t\tdata_backup='" . addslashes($DATA_BACKUP) . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_SQL_BACKUP_STARTED . '</b><br />'; } elseif (!isset($serendipity['POST']['delete']) && (count($serendipity['POST']) >= 1 && !isset($serendipity['POST']['bakautomatik']))) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_sqlbackup SET "; $UPDATECONF .= "\t\tauto_backup='0', "; $UPDATECONF .= "\t\ttime_backup='0', "; $UPDATECONF .= "\t\tlast_backup='0', "; $UPDATECONF .= "\t\tdata_backup='" . addslashes($DATA_BACKUP) . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_SQL_BACKUP_STOPPED . '</b><br />'; } if (isset($UPDATECONF)) { serendipity_db_query($UPDATECONF); } unset($UPDATECONF); if (!isset($serendipity['POST']['delete']) && isset($serendipity['POST']['delautomatik']) && $serendipity['POST']['delautomatik'] == 1) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_sqlbackup SET "; $UPDATECONF .= "\t\tauto_backdel='1', "; $UPDATECONF .= "\t\ttime_backdel='" . $serendipity['POST']['delage'] . "', "; $UPDATECONF .= "\t\tlast_backdel='" . time() . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_SQL_DELETE_STARTED . '</b><br />'; } elseif (!isset($serendipity['POST']['delete']) && (count($serendipity['POST']) >= 1 && !isset($serendipity['POST']['delautomatik']))) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_sqlbackup SET "; $UPDATECONF .= "\t\tauto_backdel='0', "; $UPDATECONF .= "\t\ttime_backdel='0', "; $UPDATECONF .= "\t\tlast_backdel='0' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_SQL_DELETE_STOPPED . '</b><br />'; } if (isset($UPDATECONF)) { serendipity_db_query($UPDATECONF); } if (isset($serendipity['POST']['backup']) && $serendipity['POST']['backup'] == 1) { if (isset($serendipity['POST']['complete']) && $serendipity['POST']['complete'] == 1) { $this->MakeSQLBackup(1, NULL, $serendipity['POST']['data'], $serendipity['POST']['drop']); } else { $this->MakeSQLBackup(0, $serendipity['POST']['tables'], $serendipity['POST']['data'], $serendipity['POST']['drop']); } if ($serendipity['POST']['pack'] == 1) { $archiv = "../" . date("Y-m-d-H-i", time()) . "_sqlbackup.tar.gz"; chdir($TEMPDIR); if (file_exists($archiv)) { unlink($archiv); } $this->getTar(); $tar_object = new Archive_Tar($archiv, "gz"); $tar_object->setErrorHandling(PEAR_ERROR_RETURN); $filelist[0] = "./last_backup"; $tar_object->create($filelist); chmod($archiv, 0666); chdir($serendipity['serendipityPath']); } else { $archiv = "../" . date("Y-m-d-H-i", time()) . "_sqlbackup.tar"; chdir($TEMPDIR); if (file_exists($archiv)) { unlink($archiv); } $this->getTar(); $tar_object = new Archive_Tar($archiv, FALSE); $tar_object->setErrorHandling(PEAR_ERROR_RETURN); $filelist[0] = "./last_backup"; $tar_object->create($filelist); chmod($archiv, 0666); chdir($serendipity['serendipityPath']); } $fe = opendir($TEMPDIR . "/last_backup"); while ($file = readdir($fe)) { if ($file != "." && $file != ".." && $file != "index.php" && $file != "cvs" && $file != "CVS") { unlink($TEMPDIR . "/last_backup/" . $file); } } closedir($fe); $STATUSMSG .= '<b>' . PLUGIN_BACKUP_SQL_SAVED . '</b><br />'; } } if (isset($serendipity['POST']['action']) && $serendipity['POST']['action'] == "makehtmlbackup") { $STATUSMSG = ''; unset($UPDATECONF); if (!isset($serendipity['POST']['complete']) || $serendipity['POST']['complete'] != 1) { $serendipity['POST']['complete'] = 0; } $DATA_BACKUP = $serendipity['serendipityPath']; $DATA_BACKUP .= "|^|"; $s9ypath = trim($serendipity['serendipityPath']); $s9ydir = preg_replace("`^.*\\/([^\\/]*)\\/\$`", "\\1", $s9ypath); if (substr($s9ypath, strlen($s9ypath) - 1, strlen($s9ypath)) == "/") { $s9ypath = substr($s9ypath, 0, strlen($s9ypath) - 1); } $dirs_to_exclude = array(); $fd = opendir($s9ypath); while ($dir = readdir($fd)) { if (is_dir($dir) && $dir != "." && $dir != "..") { if (is_array($serendipity['POST']['dirs']) && !in_array($dir, $serendipity['POST']['dirs'])) { $dirs_to_exclude[] = $dir; } } } closedir($fd); $DATA_BACKUP .= isset($serendipity['POST']['complete']) && $serendipity['POST']['complete'] == 1 ? serialize(array()) : serialize($dirs_to_exclude); if (!isset($serendipity['POST']['delete']) && isset($serendipity['POST']['bakautomatik']) && $serendipity['POST']['bakautomatik'] == 1) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_htmlbackup SET "; $UPDATECONF .= "\t\tauto_backup='1', "; $UPDATECONF .= "\t\ttime_backup='" . $serendipity['POST']['interval'] . "', "; $UPDATECONF .= "\t\tlast_backup='" . time() . "', "; $UPDATECONF .= "\t\tdata_backup='" . addslashes($DATA_BACKUP) . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_HTML_BACKUP_STARTED . '</b><br />'; } elseif (!isset($serendipity['POST']['delete']) && (count($serendipity['POST']) >= 1 && !isset($serendipity['POST']['bakautomatik']))) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_htmlbackup SET "; $UPDATECONF .= "\t\tauto_backup='0', "; $UPDATECONF .= "\t\ttime_backup='0', "; $UPDATECONF .= "\t\tlast_backup='0', "; $UPDATECONF .= "\t\tdata_backup='" . addslashes($DATA_BACKUP) . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_HTML_BACKUP_STOPPED . '</b><br />'; } if (isset($UPDATECONF)) { serendipity_db_query($UPDATECONF); } unset($UPDATECONF); if (!isset($serendipity['POST']['delete']) && isset($serendipity['POST']['delautomatik']) && $serendipity['POST']['delautomatik'] == 1) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_htmlbackup SET "; $UPDATECONF .= "\t\tauto_backdel='1', "; $UPDATECONF .= "\t\ttime_backdel='" . $serendipity['POST']['delage'] . "', "; $UPDATECONF .= "\t\tlast_backdel='" . time() . "' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_HTML_DELETE_STARTED . '</b><br />'; } elseif (!isset($serendipity['POST']['delete']) && (count($serendipity['POST']) >= 1 && !isset($serendipity['POST']['delautomatik']))) { $UPDATECONF = "UPDATE {$serendipity['dbPrefix']}dma_htmlbackup SET "; $UPDATECONF .= "\t\tauto_backdel='0', "; $UPDATECONF .= "\t\ttime_backdel='0', "; $UPDATECONF .= "\t\tlast_backdel='0' "; $STATUSMSG .= '<b>' . PLUGIN_BACKUP_AUTO_HTML_DELETE_STOPPED . '</b><br />'; } if (isset($UPDATECONF)) { serendipity_db_query($UPDATECONF); } if (isset($serendipity['POST']['backup']) && $serendipity['POST']['backup'] == 1) { if (isset($serendipity['POST']['complete']) && $serendipity['POST']['complete'] == 1) { $this->MakeHTMLBackup($s9ypath); } else { $this->MakeHTMLBackup($s9ypath, $dirs_to_exclude); } $STATUSMSG .= '<b>' . PLUGIN_BACKUP_HTML_SAVED . '</b><br />'; } } if (isset($serendipity['POST']['del']) and count($serendipity['POST']['del']) >= 1) { for ($a = 0; $a < count($serendipity['POST']['del']); $a++) { unlink($ARCHIVDIR . "/" . basename($serendipity['POST']['del'][$a])); } } if (isset($_GET['recover']) && isset($_GET['backup']) && $_GET['recover'] == 1 && trim($_GET['backup']) != "") { $STATUSMSG .= $this->RecoverSQLBackup($_GET['backup']); } elseif (isset($_GET['download']) && isset($_GET['backup']) && $_GET['download'] == 1 && trim($_GET['backup']) != "") { $file = $BACKUPDIR . "/" . basename($_GET['backup']); $fp = fopen($file, "r"); if (preg_match("@.gz\$@", $_GET['backup'])) { header("Content-Type: application/x-gzip-compressed"); } elseif (preg_match("@.tar\$@", $_GET['backup'])) { header("Content-Type: application/x-tar-compressed"); } header("Content-Transfer-Encoding: Binary"); header("Content-length: " . filesize($BACKUPDIR . "/" . $_GET['backup'])); header("Content-disposition: attachment; filename=" . basename($_GET['backup'])); while (!feof($fp)) { $buff = fread($fp, 4096); print $buff; } } $retconfs = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}dma_sqlbackup"); foreach ($retconfs[0] as $key => $val) { $backupconfig[$key] = stripslashes(trim($val)); } $backupdatas_array = explode("|^|", $backupconfig['data_backup']); $complete = intval($backupdatas_array[0]); $tables = unserialize($backupdatas_array[1]); $data = $backupdatas_array[2]; $drop = intval($backupdatas_array[3]); $pack = intval($backupdatas_array[4]); if (isset($tdbgcolor) && $tdbgcolor == "#ebebeb") { $tdbgcolor = "#efefef"; } else { $tdbgcolor = "#ebebeb"; } $BACKUPFORM = "<div align=\"center\"><b>" . PLUGIN_BACKUP_SQL_BACKUP . "</b></div>\n"; $BACKUPFORM .= '<table width="100%" border="0" cellspacing="1" cellpadding="2" align="center">'; $BACKUPFORM .= '<form name="NewBackupForm" action="?" method="POST">'; $BACKUPFORM .= '<input type="hidden" name="serendipity[c]" value="backup" /> <input type="hidden" name="serendipity[action]" value="makesqlbackup" /> <input type="hidden" name="serendipity[backup]" value="1" />'; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminModule]\" value=\"event_display\" />\n"; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminAction]\" value=\"backup\" />\n"; $BACKUPFORM .= '<tr>'; $BACKUPFORM .= '<td width="250px" rowspan="3" style="background-color:' . $tdbgcolor . '" align="left"><select style="width:250px" name="serendipity[tables][]" size="11" multiple>'; $QUERY = serendipity_db_query("SHOW TABLES"); $co = 0; foreach ($QUERY as $THISTABLE) { if (count($tables) >= 1) { if (@in_array($THISTABLE[0], $tables)) { $BACKUPFORM .= '<option value="' . $THISTABLE[0] . '" selected>' . $THISTABLE[0] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $THISTABLE[0] . '">' . $THISTABLE[0] . '</option>'; } } else { $BACKUPFORM .= '<option value="' . $THISTABLE[0] . '"'; if ($co == 0) { $BACKUPFORM .= ' selected'; } $BACKUPFORM .= '>' . $THISTABLE[0] . '</option>'; } $co++; } $BACKUPFORM .= '</select></td>'; $BACKUPFORM .= '<td style="background-color:' . $tdbgcolor . '" align="left" valign="top"> <select name="serendipity[data]"> <option value="0"> --- ' . PLUGIN_BACKUP_PLEASE_CHOOSE . ' --- </option>'; if (isset($data) && $data == "data") { $BACKUPFORM .= ' <option value="data" selected>' . PLUGIN_BACKUP_STRUCT_AND_DATA . '</option>'; $BACKUPFORM .= ' <option value="structure">' . PLUGIN_BACKUP_ONLY_STRUCT . '</option>'; $BACKUPFORM .= ' <option value="dataonly">' . PLUGIN_BACKUP_ONLY_DATA . '</option>'; } elseif (isset($data) && $data == "structure") { $BACKUPFORM .= ' <option value="data">' . PLUGIN_BACKUP_STRUCT_AND_DATA . '</option>'; $BACKUPFORM .= ' <option value="structure" selected>' . PLUGIN_BACKUP_ONLY_STRUCT . '</option>'; $BACKUPFORM .= ' <option value="dataonly">' . PLUGIN_BACKUP_ONLY_DATA . '</option>'; } elseif (isset($data) && $data == "dataonly") { $BACKUPFORM .= ' <option value="data">' . PLUGIN_BACKUP_STRUCT_AND_DATA . '</option>'; $BACKUPFORM .= ' <option value="structure">' . PLUGIN_BACKUP_ONLY_STRUCT . '</option>'; $BACKUPFORM .= ' <option value="dataonly" selected>' . PLUGIN_BACKUP_ONLY_DATA . '</option>'; } else { $BACKUPFORM .= ' <option value="data" selected>' . PLUGIN_BACKUP_STRUCT_AND_DATA . '</option>'; $BACKUPFORM .= ' <option value="structure">' . PLUGIN_BACKUP_ONLY_STRUCT . '</option>'; $BACKUPFORM .= ' <option value="dataonly">' . PLUGIN_BACKUP_ONLY_DATA . '</option>'; } $BACKUPFORM .= ' </select><br />'; if (isset($drop) && $drop == 1) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[drop]" value="1" checked /> ' . PLUGIN_BACKUP_WITH_DROP_TABLE . '<br />'; } elseif (isset($drop) && $drop == "0") { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[drop]" value="1" /> ' . PLUGIN_BACKUP_WITH_DROP_TABLE . '<br />'; } elseif (!isset($drop)) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[drop]" value="1" checked /> ' . PLUGIN_BACKUP_WITH_DROP_TABLE . '<br />'; } if (isset($pack) && $pack == 1) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[pack]" value="1" checked /> ' . PLUGIN_BACKUP_ZIPPED . '<br />'; } elseif (isset($pack) && $pack == "0") { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[pack]" value="1" /> ' . PLUGIN_BACKUP_ZIPPED . '<br />'; } elseif (!isset($pack)) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[pack]" value="1" checked /> ' . PLUGIN_BACKUP_ZIPPED . '<br />'; } if (isset($complete) && $complete == 1) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[complete]" value="1" checked /> ' . PLUGIN_BACKUP_WHOLE_DATABASE . '<br />'; } elseif (isset($complete) && $complete == "0") { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[complete]" value="1" /> ' . PLUGIN_BACKUP_WHOLE_DATABASE . '<br />'; } elseif (!isset($complete)) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[complete]" value="1" /> ' . PLUGIN_BACKUP_WHOLE_DATABASE . '<br />'; } $BACKUPFORM .= ' </td>'; $BACKUPFORM .= '<td width="75" style="background-color:' . $tdbgcolor . '" align="center" valign="middle"><input class="serendipityPrettyButton input_button" type="submit" name="serendipity[submit]" value="' . PLUGIN_BACKUP_START_BACKUP . '" /></td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '<tr>'; if ($backupconfig['auto_backup'] == 1) { $C_automatik = ' checked'; } else { $C_automatik = ''; } if ($backupconfig['auto_backdel'] == 1) { $C_delmatik = ' checked'; } else { $C_delmatik = ''; } $BAKAUTO['TIME'] = array(600, 3600, 7200, 21600, 43200, 86400, 172800, 345600, 604800, 1209600, 2419200); $BAKAUTO['TEXT'] = array('10 ' . PLUGIN_BACKUP_MINUTES, PLUGIN_BACKUP_EVERY . ' ' . PLUGIN_BACKUP_HOUR, PLUGIN_BACKUP_EVERY . ' 2 ' . PLUGIN_BACKUP_HOURS, PLUGIN_BACKUP_EVERY . ' 6 ' . PLUGIN_BACKUP_HOURS, PLUGIN_BACKUP_EVERY . ' 12 ' . PLUGIN_BACKUP_HOURS, PLUGIN_BACKUP_EVERY . ' 24 ' . PLUGIN_BACKUP_HOURS, PLUGIN_BACKUP_EVERY . ' 2 ' . PLUGIN_BACKUP_DAYS, PLUGIN_BACKUP_EVERY . ' 4 ' . PLUGIN_BACKUP_DAYS, PLUGIN_BACKUP_EVERY . ' 7 ' . PLUGIN_BACKUP_DAYS, PLUGIN_BACKUP_EVERY . ' 2 ' . PLUGIN_BACKUP_WEEKS, PLUGIN_BACKUP_EVERY . ' 4 ' . PLUGIN_BACKUP_WEEKS); $DELAUTO['TIME'] = array(43200, 86400, 172800, 345600, 604800, 1209600, 2419200, 4838400, 14515200); $DELAUTO['TEXT'] = array('12 ' . PLUGIN_BACKUP_HOURS, ' 24 ' . PLUGIN_BACKUP_HOURS, '2 ' . PLUGIN_BACKUP_DAYS, '4 ' . PLUGIN_BACKUP_DAYS, '7 ' . PLUGIN_BACKUP_DAYS, '2 ' . PLUGIN_BACKUP_WEEKS, '4 ' . PLUGIN_BACKUP_WEEKS, '2 ' . PLUGIN_BACKUP_MONTHS, '6 ' . PLUGIN_BACKUP_MONTHS); $BACKUPFORM .= '<td colspan="2" style="background-color:' . $tdbgcolor . '" align="center" valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2"> ' . PLUGIN_BACKUP_AUTO_BACKUP . '<br /> <input class="input_checkbox" type="checkbox" name="serendipity[bakautomatik]" value="1"' . $C_automatik . ' /> ' . PLUGIN_BACKUP_ACTIVATE_AUTO_BACKUP . '<br /></td> </tr> <tr> <td width="170">' . PLUGIN_BACKUP_TIME_BET_BACKUPS . '</td> <td><select name="serendipity[interval]">'; for ($BA = 0; $BA < count($BAKAUTO['TIME']); $BA++) { if ($backupconfig['time_backup'] >= 1) { if ($BAKAUTO['TIME'][$BA] == $backupconfig['time_backup']) { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '" selected>' . $BAKAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '">' . $BAKAUTO['TEXT'][$BA] . '</option>'; } } else { if ($BA == 3) { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '" selected>' . $BAKAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '">' . $BAKAUTO['TEXT'][$BA] . '</option>'; } } } $BACKUPFORM .= ' </select></td> </tr> </table> </td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '<tr>'; $BACKUPFORM .= '<td colspan="2" style="background-color:' . $tdbgcolor . '" align="center" valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2"> ' . PLUGIN_BACKUP_DEL_OLD_BACKUPS . '<br /> <input class="input_checkbox" type="checkbox" name="serendipity[delautomatik]" value="1"' . $C_delmatik . ' /> ' . PLUGIN_BACKUP_ACTIVATE_AUTO_DELETE . '<br /></td> </tr> <tr> <td width="140">' . PLUGIN_BACKUP_OLDER_THAN . '</td> <td><select name="serendipity[delage]">'; for ($BA = 0; $BA < count($DELAUTO['TIME']); $BA++) { if ($backupconfig['time_backdel'] >= 1) { if ($DELAUTO['TIME'][$BA] == $backupconfig['time_backdel']) { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '" selected>' . $DELAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '">' . $DELAUTO['TEXT'][$BA] . '</option>'; } } else { if ($BA == 6) { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '" selected>' . $DELAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '">' . $DELAUTO['TEXT'][$BA] . '</option>'; } } } $BACKUPFORM .= ' </select> ' . PLUGIN_BACKUP_WILL_BE_DELETED . '</td> </tr> </table> </td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '</form>'; $BACKUPFORM .= '</table><br />'; unset($BACKUPS); $retconfh = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}dma_htmlbackup"); foreach ($retconfh[0] as $key => $val) { $htmlbackupconfig[$key] = stripslashes(trim($val)); } $backupdatah_array = explode("|^|", $htmlbackupconfig['data_backup']); $dir_to_backup = trim($backupdata_array[0]); if (substr($dir_to_backup, strlen($dir_to_backup) - 1, strlen($dir_to_backup)) == "/") { $dir_to_backup = substr($dir_to_backup, 0, strlen($dir_to_backup) - 1); } $exclude = unserialize(trim($backupdatah_array[1])); $BACKUPFORM .= "<div align=\"center\"><b>" . PLUGIN_BACKUP_HTML_BACKUP . "</b></div>\n"; if (isset($tdbgcolor) && $tdbgcolor == "#ebebeb") { $tdbgcolor = "#efefef"; } else { $tdbgcolor = "#ebebeb"; } $BACKUPFORM .= '<table width="100%" border="0" cellspacing="1" cellpadding="2" align="center">'; $BACKUPFORM .= '<form name="NewHBackupForm" action="?" method="POST">'; $BACKUPFORM .= '<input type="hidden" name="serendipity[c]" value="backup" /> <input type="hidden" name="serendipity[action]" value="makehtmlbackup" /> <input type="hidden" name="serendipity[backup]" value="1" />'; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminModule]\" value=\"event_display\" />\n"; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminAction]\" value=\"backup\" />\n"; $BACKUPFORM .= '<tr>'; $BACKUPFORM .= '<td width="250px" rowspan="3" style="background-color:' . $tdbgcolor . '" align="left"> <select style="width:250px" name="serendipity[dirs][]" size="8" multiple>'; $s9ypath = trim($serendipity['serendipityPath']); $s9ydir = preg_replace("`^.*\\/([^\\/]*)\\/\$`", "\\1", $s9ypath); $dirs = array(); $fd = opendir($s9ypath); while ($dir = readdir($fd)) { if (is_dir($dir) && $dir != "." && $dir != "..") { $dirs[] = $dir; } } closedir($fd); unset($dir); @reset($dirs); asort($dirs); @reset($dirs); foreach ($dirs as $dir) { if (is_array($exclude) && count($exclude) >= 1) { if (!in_array($dir, $exclude)) { $BACKUPFORM .= '<option value="' . $dir . '" selected>' . $s9ydir . "/" . $dir . '</option>'; } else { $BACKUPFORM .= '<option value="' . $dir . '">' . $s9ydir . "/" . $dir . '</option>'; } } else { $BACKUPFORM .= '<option value="' . $dir . '"'; if ($co == 0) { $BACKUPFORM .= ' selected'; } $BACKUPFORM .= '>' . $s9ydir . "/" . $dir . '</option>'; } $co++; } $BACKUPFORM .= '</select></td>'; $BACKUPFORM .= '<td style="background-color:' . $tdbgcolor . '" align="left" valign="top">'; if (!is_array($exclude) || count($exclude) <= 0) { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[complete]" value="1" checked /> ' . PLUGIN_BACKUP_WHOLE_BLOG . '<br />'; } else { $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[complete]" value="1" /> ' . PLUGIN_BACKUP_WHOLE_BLOG . '<br />'; } $BACKUPFORM .= ' </td>'; $BACKUPFORM .= '<td width="75" style="background-color:' . $tdbgcolor . '" align="center" valign="middle"><input class="serendipityPrettyButton input_button" type="submit" name="serendipity[submit]" value="' . PLUGIN_BACKUP_START_BACKUP . '" /></td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '<tr>'; if ($htmlbackupconfig['auto_backup'] == 1) { $C_automatik = ' checked'; } else { $C_automatik = ''; } if ($htmlbackupconfig['auto_backdel'] == 1) { $C_delmatik = ' checked'; } else { $C_delmatik = ''; } $BACKUPFORM .= '<td colspan="2" style="background-color:' . $tdbgcolor . '" align="center" valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2"> ' . PLUGIN_BACKUP_AUTO_BACKUP . '<br /> <input class="input_checkbox" type="checkbox" name="serendipity[bakautomatik]" value="1"' . $C_automatik . ' /> ' . PLUGIN_BACKUP_ACTIVATE_AUTO_BACKUP . '<br /></td> </tr> <tr> <td width="170">' . PLUGIN_BACKUP_TIME_BET_BACKUPS . '</td> <td><select name="serendipity[interval]">'; for ($BA = 0; $BA < count($BAKAUTO['TIME']); $BA++) { if ($htmlbackupconfig['time_backup'] >= 1) { if ($BAKAUTO['TIME'][$BA] == $htmlbackupconfig['time_backup']) { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '" selected>' . $BAKAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '">' . $BAKAUTO['TEXT'][$BA] . '</option>'; } } else { if ($BA == 3) { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '" selected>' . $BAKAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $BAKAUTO['TIME'][$BA] . '">' . $BAKAUTO['TEXT'][$BA] . '</option>'; } } } $BACKUPFORM .= ' </select></td> </tr> </table> </td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '<tr>'; $BACKUPFORM .= '<td colspan="2" style="background-color:' . $tdbgcolor . '" align="center" valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2"> ' . PLUGIN_BACKUP_DEL_OLD_BACKUPS . '<br /> <input class="input_checkbox" type="checkbox" name="serendipity[delautomatik]" value="1"' . $C_delmatik . ' /> ' . PLUGIN_BACKUP_ACTIVATE_AUTO_DELETE . '<br /></td> </tr> <tr> <td width="140">' . PLUGIN_BACKUP_OLDER_THAN . '</td> <td><select name="serendipity[delage]">'; for ($BA = 0; $BA < count($DELAUTO['TIME']); $BA++) { if ($htmlbackupconfig['time_backdel'] >= 1) { if ($DELAUTO['TIME'][$BA] == $htmlbackupconfig['time_backdel']) { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '" selected>' . $DELAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '">' . $DELAUTO['TEXT'][$BA] . '</option>'; } } else { if ($BA == 6) { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '" selected>' . $DELAUTO['TEXT'][$BA] . '</option>'; } else { $BACKUPFORM .= '<option value="' . $DELAUTO['TIME'][$BA] . '">' . $DELAUTO['TEXT'][$BA] . '</option>'; } } } $BACKUPFORM .= ' </select> ' . PLUGIN_BACKUP_WILL_BE_DELETED . '</td> </tr> </table> </td>'; $BACKUPFORM .= '</tr>'; $BACKUPFORM .= '</form>'; $BACKUPFORM .= '</table><br />'; unset($BACKUPS); $bc = 0; $fd = opendir($BACKUPDIR); while ($backup = readdir($fd)) { if (preg_match("@backup@", $backup)) { $BACKUPS['NAME'][$bc] = $backup; $BACKUPS['FILE'][$bc] = $BACKUPDIR . "/" . $backup; $BACKUPS['TIME'][$bc] = filemtime($BACKUPDIR . "/" . $backup); $BACKUPS['SIZE'][$bc] = filesize($BACKUPDIR . "/" . $backup); $bc++; } } closedir($fd); @reset($BACKUPS); @array_multisort($BACKUPS['TIME'], SORT_DESC, SORT_NUMERIC, $BACKUPS['NAME'], $BACKUPS['FILE'], $BACKUPS['SIZE']); if (isset($tdbgcolor) && $tdbgcolor == "#ebebeb") { $tdbgcolor = "#efefef"; } else { $tdbgcolor = "#ebebeb"; } if (count($BACKUPS['NAME']) >= 1) { $BACKUPFORM .= "\n\n\n" . '<table width="100%" border="0" cellspacing="1" cellpadding="2" align="center">' . "\n"; $BACKUPFORM .= '<form name="UPForm" action="?" method="POST">' . "\n"; $BACKUPFORM .= '<input type="hidden" name="serendipity[c]" value="backup" /> <input type="hidden" name="serendipity[action]" value="deletesqlbackup" />' . "\n"; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminModule]\" value=\"event_display\" />\n"; $BACKUPFORM .= "<input type=\"hidden\" name=\"serendipity[adminAction]\" value=\"backup\" />\n"; $BACKUPFORM .= '<tr>' . "\n"; $BACKUPFORM .= '<td style="background-color:' . $tdbgcolor . '" align="left"><span style="font-weight: bolder;">' . PLUGIN_BACKUP_FILENAME . '</span></td>' . "\n"; $BACKUPFORM .= '<td width="100" style="background-color:' . $tdbgcolor . '" align="right"><span style="font-weight: bolder;">' . PLUGIN_BACKUP_FILESIZE . '</span></td>' . "\n"; $BACKUPFORM .= '<td width="140" style="background-color:' . $tdbgcolor . '" align="right"><span style="font-weight: bolder;">' . PLUGIN_BACKUP_DATE . '</span></td>' . "\n"; $BACKUPFORM .= '<td width="60" style="background-color:' . $tdbgcolor . '" align="center"><span style="font-weight: bolder;">' . PLUGIN_BACKUP_OPTION . '</span></td>' . "\n"; $BACKUPFORM .= '</tr>' . "\n"; for ($bco = 0; $bco < count($BACKUPS['NAME']); $bco++) { if (isset($tdbgcolor) && $tdbgcolor == "#ebebeb") { $tdbgcolor = "#efefef"; } else { $tdbgcolor = "#ebebeb"; } $BACKUPFORM .= '<tr>' . "\n"; $BACKUPFORM .= '<td style="background-color:' . $tdbgcolor . '" align="left"><a href="' . $serendipity['baseURL'] . ($serendipity['rewrite'] == "none" ? $serendipity['indexFile'] . "?/" : "") . 'plugin/dlbackup_' . $BACKUPS['NAME'][$bco] . '">' . $BACKUPS['NAME'][$bco] . '</a></td>' . "\n"; $BACKUPFORM .= '<td width="100" style="background-color:' . $tdbgcolor . '" align="right">' . $this->calcFilesize($BACKUPS['SIZE'][$bco]) . '</td>' . "\n"; $BACKUPFORM .= '<td width="140" style="background-color:' . $tdbgcolor . '" align="right">' . date("d.m.Y, H:i", $BACKUPS['TIME'][$bco]) . '</td>' . "\n"; $BACKUPFORM .= '<td width="60" style="background-color:' . $tdbgcolor . '" align="center">' . "\n"; if (preg_match("@htmlbackup@", $BACKUPS['NAME'][$bco])) { $BACKUPFORM .= "\t<img alt=\"\" src=\"" . $this->getRelPath() . "/img/e.gif\" width=18 height=18 border=\"0\" valign=\"absmiddle\" align=\"middle\" />"; } else { $BACKUPFORM .= "\t<a href=\"./serendipity_admin.php?serendipity[adminModule]=event_display&serendipity[adminAction]=backup&backup=" . $BACKUPS['NAME'][$bco] . "&recover=1\"><img alt=\"\" src=\"" . $this->getRelPath() . "/img/recover.gif\" width=18 height=18 border=\"0\" valign=\"absmiddle\" align=\"middle\" title=\"" . PLUGIN_BACKUP_RECOVER_THIS . "\" alt=\"" . PLUGIN_BACKUP_RECOVER_THIS . "\" /></a>"; } $BACKUPFORM .= ' <input class="input_checkbox" type="checkbox" name="serendipity[del][]" value="' . $BACKUPS['NAME'][$bco] . '" /></td>' . "\n"; $BACKUPFORM .= '</tr>' . "\n"; } if (isset($tdbgcolor) && $tdbgcolor == "#ebebeb") { $tdbgcolor = "#efefef"; } else { $tdbgcolor = "#ebebeb"; } $BACKUPFORM .= '<tr>' . "\n"; $BACKUPFORM .= '<td colspan="4" style="background-color:' . $tdbgcolor . '" align="right"><span style="font-weight: bolder;"> <input class="serendipityPrettyButton input_button" type="submit" name="serendipity[delete]" value="' . PLUGIN_BACKUP_DELETE . '" /> </span></td>' . "\n"; $BACKUPFORM .= '</tr>' . "\n"; $BACKUPFORM .= '</form>' . "\n"; $BACKUPFORM .= '</table>' . "\n\n\n"; } else { $BACKUPFORM .= '<table width="100%" border="0" cellspacing="1" cellpadding="2">' . "\n"; $BACKUPFORM .= '<tr>' . "\n"; $BACKUPFORM .= '<td style="background-color:' . $tdbgcolor . '" align="center"><span style="font-weight: bolder;">' . PLUGIN_BACKUP_NO_BACKUPS . '</span></td>' . "\n"; $BACKUPFORM .= '</tr>' . "\n"; $BACKUPFORM .= '</table>' . "\n"; } echo $TITLE; if (isset($STATUSMSG) && trim($STATUSMSG) != "") { echo $STATUSMSG . "<br /><br />"; } echo $BACKUPFORM; }
/** * バックアップファイル作成. * * TODO $csv_data はデータを大きく保持しすぎに感じる。分割して書き込みたい。 * @param string $bkup_name * @return array $arrErr */ function lfCreateBkupData($bkup_name, $bkup_dir) { // 実行時間を制限しない set_time_limit(0); $objQuery =& SC_Query_Ex::getSingletonInstance(); $csv_data = ''; $csv_autoinc = ""; $arrData = array(); $success = true; if (!is_dir(dirname($bkup_dir))) { $success = mkdir(dirname($bkup_dir)); } $bkup_dir = $bkup_dir . $bkup_name . "/"; // 全テーブル取得 $arrTableList = $objQuery->listTables(); // 各テーブル情報を取得する foreach ($arrTableList as $table) { if (!($table == "dtb_bkup" || $table == "mtb_zip")) { // 全データを取得 if ($table == "dtb_pagelayout") { $arrData = $objQuery->getAll("SELECT * FROM {$table} ORDER BY page_id"); } else { $arrData = $objQuery->getAll("SELECT * FROM {$table}"); } // CSVデータ生成 if (count($arrData) > 0) { // テーブル名 $csv_data .= $table . "\r\n"; // カラム名 $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv(array_keys($arrData[0])) . "\r\n"; // データ foreach ($arrData as $data_val) { $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv($data_val) . "\r\n"; } // テーブル終端 $csv_data .= "\r\n"; } // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } } // 自動採番型の構成を取得する $csv_autoinc = $this->lfGetAutoIncrement(); $csv_file = $bkup_dir . "bkup_data.csv"; $csv_autoinc_file = $bkup_dir . "autoinc_data.csv"; mb_internal_encoding(CHAR_CODE); // CSV出力 // ディレクトリが存在していなければ作成する if (!is_dir(dirname($csv_file))) { $success = mkdir(dirname($csv_file)); } if ($success) { // dataをCSV出力 $fp = fopen($csv_file, 'w'); if ($fp) { if ($csv_data != "") { $success = fwrite($fp, $csv_data); } fclose($fp); } // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, 'w'); if ($fp) { if ($csv_autoinc != "") { $success = fwrite($fp, $csv_autoinc); } fclose($fp); } } if ($success) { //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE); //bkupフォルダに移動する chdir($this->bkup_dir); //圧縮をおこなう $zip = $tar->create("./" . $bkup_name . "/"); // バックアップデータの削除 if ($zip) { SC_Utils_Ex::sfDelFile($bkup_dir); } } if (!$success) { $arrErr['bkup_name'] = "バックアップに失敗しました。"; // バックアップデータの削除 SC_Utils_Ex::sfDelFile($bkup_dir); } return isset($arrErr) ? $arrErr : array(); }
// switch to PHP/Math build directory chdir($buildDir); $tarName = "{$pkgName}.tar.gz"; $tarPath = $buildDir . $pkgName . "/downloads/" . $tarName; if ($_GET['op'] == "download") { require_once 'Archive/Tar.php'; $tar = new Archive_Tar($tarPath); // create $pkgName archive under $pkgName folder $files = glob("{$pkgName}/*.php"); $files = array_merge($files, glob("{$pkgName}/*.TXT")); $files = array_merge($files, glob("{$pkgName}/docs/*.php")); $files = array_merge($files, glob("{$pkgName}/docs/includes/*.php")); $files = array_merge($files, glob("{$pkgName}/examples/*.php")); $files = array_merge($files, glob("{$pkgName}/tests/*.php")); $files = array_merge($files, glob("{$pkgName}/utils/*.php")); $tar->create($files); // create the download url $webDir = substr($_SERVER['PHP_SELF'], 0, -18); $urlPath = "http://" . $_SERVER['HTTP_HOST'] . $webDir . "/downloads"; // redirect to download url header("Location: {$urlPath}/{$tarName}"); } include_once "../libraries/PhpOffice/PHPExcel/Shared/JAMA/docs/includes/header.php"; include_once "../libraries/PhpOffice/PHPExcel/Shared/JAMA/docs/includes/navbar.php"; ?> <p>Download current version:</p> <ul> <li><a href='<?php echo $_SERVER['PHP_SELF'] . "?op=download"; ?> '><?php
// Create zip file $cmd = $config->zip . ' -r ' . quote($downloadArchive) . ' ' . quote($archiveName); execCommand($cmd, $retcode); if ($retcode != 0) { error_log('Unable to call zip command: ' . $cmd); print 'Unable to call zip command. See webserver error log for details.'; } } else { $downloadMimeType = 'application/x-gzip'; $downloadArchive .= '.tar.gz'; $tarArchive = $archiveName . '.tar'; // Create the tar file $retcode = 0; if (class_exists('Archive_Tar')) { $tar = new Archive_Tar($tarArchive); $created = $tar->create($archiveName); if (!$created) { $retcode = 1; header('HTTP/1.x 500 Internal Server Error', true, 500); print 'Unable to create tar archive.'; } } else { $cmd = $config->tar . ' -cf ' . quote($tarArchive) . ' ' . quote($archiveName); execCommand($cmd, $retcode); if ($retcode != 0) { header('HTTP/1.x 500 Internal Server Error', true, 500); error_log('Unable to call tar command: ' . $cmd); print 'Unable to call tar command. See webserver error log for details.'; } } if ($retcode != 0) {
/** * * Compress theme into archive file * @param string $path target archive path * @param string $name archive filename * @return string arcive path */ public function compress($path, $name = null) { if (!$name) { $name = "webasyst.{$this->app}.theme.{$this->id}.tar.gz"; } $target_file = "{$path}/{$this->app}/{$name}"; $autoload = waAutoload::getInstance(); $autoload->add('Archive_Tar', 'wa-installer/lib/vendors/PEAR/Tar.php'); $autoload->add('PEAR', 'wa-installer/lib/vendors/PEAR/PEAR.php'); if (file_exists($this->path) && class_exists('Archive_Tar', true)) { waFiles::create($target_file); $tar_object = new Archive_Tar($target_file, true); $tar_object->setIgnoreRegexp('@(\\.(php\\d?|svn|git|fw_|files\\.md5$))@'); $path = getcwd(); chdir(dirname($this->path)); if (!$tar_object->create('./' . basename($this->path))) { waFiles::delete($target_file); } chdir($path); } return $target_file; }
function template_management_pack($template, $version = 0) { global $main_smarty; // Method for identifying modules define('modulename', 'template_management'); $main_smarty->assign('modulename', modulename); $main_smarty->display(template_management_tpl_path . '/blank.tpl'); include_once '../' . template_management_path . 'class.tar.php'; $file = '/templates/' . $template . '_template.tar'; $tar_object = new Archive_Tar('.' . $file); $v_list[0] = './templates/' . $template; $tar_object->create($v_list); return $main_smarty->get_config_vars('PLIGG_Template_Management_HasBeenPacked') . ' <a href = "' . my_pligg_base . $file . '">' . $file . '</a>'; }
usage("Could not determine archive type for {$archive_file}"); } switch (substr($archive_file, $pos + 1)) { case 'tgz': case 'gz': $compression = 'gzup'; case 'bz2': $compression = 'bz2'; case 'tar': $compression = null; break; default: echo "Could not determine archive type for {$archive_file}"; } $tar = new Archive_Tar($archive_file, $compression); if (!$tar->create(array())) { usage("Could not create tar {$archive_file}"); } $glob = preg_replace('/(\\*|\\?|\\[)/', '[$1]', $translations_dir . DIRECTORY_SEPARATOR) . '*.pot'; foreach (glob($glob) as $file) { if (!$tar->addModify($file, 'translations/' . basename($file, '.pot'), $translations_dir)) { usage("Could not add {$base}"); } } echo "Created {$archive_file} with:\n"; $contents = $tar->listContent(); foreach ($contents as $content) { echo "\t{$content['filename']}\n"; } echo "Upload translations by browsing to:\n\t"; echo 'https://translations.edge.launchpad.net/' . $module . '/trunk/+translations-upload' . "\n";
function plug_download($idplug, $idclient, $_zip = false, $_name = false, $_ext = false) { global $rep, $cfg_cms, $sess; $plugin = $rep->plug_data($idplug, $idclient); // todo:zlib abfrage + popup if (is_array($plugin)) { // Event $zip = false; require_once "Archive/Tar.php"; $xmlstring = $rep->plug_generate($plugin); $name = $_name == '' ? $plugin['root_name'] : trim($_name); $zip = $cfg_cms['gzip_enabled'] == true && $_zip == true ? true : false; if ($zip === true && ($_ext == 'tar' || $_ext == 'tgz')) { $_ext = 'tgz'; } elseif ($zip === false && ($_ext == 'tar' || $_ext == 'tgz')) { $_ext = 'tar'; } else { $_ext = 'cmsplugin'; } $_mtype = $zip === true ? 'application/x-compressed' : 'application/x-tar'; $file = $cfg_cms['cms_path'] . 'upload/' . 'out/' . $name . '.' . $_ext; $download = $cfg_cms['cms_html_path'] . 'upload/' . 'out/' . $name . '.' . $_ext; lib_write_file($cfg_cms['cms_path'] . 'plugins/' . $name . '/' . $name . '.cmsplug', $xmlstring); if (false == ($tar = new Archive_Tar($file, $zip))) { return '1615'; } elseif ($tar == '-1' && $zip == true) { return plug_download($idplug, $idclient, false, $_name, $_ext); } $old_working_dir = getcwd(); chdir($cfg_cms['cms_path'] . 'plugins/'); $tar->create(trim($name)); chdir($old_working_dir); ob_end_clean(); header('Content-Type: ' . $_mtype); header('Content-Transfer-Encoding: binary'); header('Content-Description: Download Data'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Expires: 0'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: no-cache'); //old function: header('Location:' . $download); readfile($file); fire_event('plug_download', array('idplug' => $idplug, 'name' => $name)); lib_delete_file($file); exit; } }
/** * Compresses the given content * * @param string $content * @return string */ public function compress($content) { $archive = new Archive_Tar($this->getArchive(), $this->getMode()); if (!file_exists($content)) { $file = $this->getTarget(); if (is_dir($file)) { $file .= DIRECTORY_SEPARATOR . "tar.tmp"; } $result = file_put_contents($file, $content); if ($result === false) { require_once 'Zend/Filter/Exception.php'; throw new Zend_Filter_Exception('Error creating the temporary file'); } $content = $file; } if (is_dir($content)) { // collect all file infos foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($content, RecursiveDirectoryIterator::KEY_AS_PATHNAME), RecursiveIteratorIterator::SELF_FIRST) as $directory => $info) { if ($info->isFile()) { $file[] = $directory; } } $content = $file; } $result = $archive->create($content); if ($result === false) { require_once 'Zend/Filter/Exception.php'; throw new Zend_Filter_Exception('Error creating the Tar archive'); } return $this->getArchive(); }
private function compress() { if (file_exists($this->archive_path)) { $date = date('c', max(filemtime($this->archive_path), filectime($this->archive_path))); $this->tracef('Unlink previous version of archive from %s', $date); unlink($this->archive_path); } $current = getcwd(); chdir($this->path); $files_md5_path = "{$this->path}/.files.md5"; $this->md5($this->files, $files_md5_path); $temp_files = array(); $temp_files[] = $files_md5_path; chdir($this->path . '/../'); $archive_files = array(); $archive_files[] = array($this->folder . '/.files.md5', $files_md5_path); foreach ($this->files as $file) { $archive_files[] = $this->folder . '/' . $file; } try { $time = microtime(true); $tar_object = new Archive_Tar($this->archive_path, true); if ($result = $tar_object->create($archive_files)) { $size = filesize($this->archive_path); $this->tracef("\ntime\t%d ms\nsize\t%0.2f KByte\n", (microtime(true) - $time) * 1000, $size / 1024); } else { $this->trace('Error during compress archive'); } } catch (Exception $ex) { $this->trace($ex->getMessage()); $temp_files[] = $this->archive_path; } foreach ($temp_files as $file) { if (file_exists($file)) { unlink($file); } } chdir($current); }
function create_tar_archive($archiveName, $compressMethod, $itemArray) { global $newBackupMethod; if ($newBackupMethod) { // Create a tar object using the pear library // (this is the preferred method) $tar = new Archive_Tar($archiveName, $compressMethod); if ($tar->create($itemArray)) { return true; } } else { // Create the tar files via command line tools // (this method used when the tar pear library is not available) $files = '"' . implode('" "', $itemArray) . '"'; if ($compressMethod == "gz") { $command = "tar --same-owner --ignore-failed-read -zcphf {$archiveName} {$files}"; } else { $command = "tar -cpf {$archiveName} {$files}"; } $temp0 = exec($command, $temp1, $temp2); if ($temp2) { die("\"{$command}\" returned {$temp2}: {$temp0}"); } return true; } return false; }
function CreateArchive($outfile, $type, $infiles, $timest) { // This is used to create .tar archives // It is contained in the PEAR package Archive_Tar include_once "Archive/Tar.php"; // Multiple files cannot be provided in plain format. // Therefore they are packed in a tar archive. if (is_array($infiles) && $type == "plain") { $type = "tar"; } // There may already be an archive for the current user // saved in the ./html/log directory. This file is deleted // to ensure that there can only be one archive with the same // archive name. $glob = glob($outfile . "*"); if (count($glob) > 0) { foreach (glob($outfile . "*") as $file) { unlink($file); } } $tarname = $outfile; // If the user wishes to have the creation time in the archive's file name. // it gets added here if ($timest == 1) { $tarname .= "_" . date("Ymd_Hi"); } if ($type != "plain") { $tarname .= ".tar"; // Now a new Archive_Tar object is created // This object is used to create the .tar archive $tar = new Archive_Tar($tarname); // If $infile is only a string containing one single file name, // this string is put into an array. If there are more than one // input files, we already have an array and thus don't need to // create a new one. if (is_array($infiles)) { $tar->create($infiles); // This creates the .tar archive } else { $tar->create(array($infiles)); // This creates the .tar archive } } else { if (stristr($infiles, ".csv") != false) { $tarname .= ".csv"; } elseif (stristr($infiles, ".sql") != false) { $tarname .= ".sql"; } copy($infiles, $tarname); } // Depending on the parameter $type the archive gets compressed // If $type is empty or an invalid value, the .tar archive stays // unchanged switch ($type) { case "gz": // The previously created .tar archive is opened for reading $archive = fopen($tarname, "r"); // This is the new gzip archive that is going to be created $gzip = gzopen("{$tarname}.gz", "w"); // The size of the .tar archive is counted and the number of // 2 MB blocks is counted $mb = ceil(filesize($tarname) / (1024 * 1024 * 2)); // The .tar archive is split into $mb parts and these parts are // read and written to the gzip archive one after the other for ($i = 0; $i < $mb; $i++) { gzwrite($gzip, fread($archive, filesize($tarname) / $mb)); } // Both archives, the .tar archive and the new gzip archive are closed gzclose($gzip); fclose($archive); // The .tar archive must be deleted manually unlink($tarname); // The name of the gzip file is returned, so the user does not have // to think about file extensions when calling this function return $tarname . ".gz"; break; case "bz2": // The previously created .tar archive is opened for reading $archive = fopen($tarname, "r"); // This is the new bzip2 archive that is going to be created $bzip2 = bzopen("{$tarname}.bz2", "w"); // The size of the .tar archive is counted and the number of // 2 MB blocks is counted $mb = ceil(filesize($tarname) / (1024 * 1024 * 5)); // The .tar archive is split into $mb parts and these parts are // read and written to the bzip2 archive one after the other for ($i = 0; $i < $mb; $i++) { bzwrite($bzip2, fread($archive, filesize($tarname) / $mb)); } // Both archives, the .tar archive and the new bzip2 archive are closed bzclose($bzip2); fclose($archive); // The .tar archive must be deleted manually unlink($tarname); // The name of the bzip2 file is returned, so the user does not have // to think about file extensions when calling this function return $tarname . ".bz2"; break; case "tar": case "plain": default: // In any other case the .tar file is left unchanged and its file name is returned return $tarname; } }