private static function _create_backup($folder) { $bfolder = db_select_first("simple_sys_tree", "*", "id=@id@", "lft asc", array("id" => $folder)); $folders = db_select("simple_sys_tree", "*", "lft between @lft@ and @rgt@", "lft asc", "", array("lft" => $bfolder["lft"], "rgt" => $bfolder["rgt"])); if (empty($bfolder["id"]) or !is_array($folders)) { return ""; } $folder_path = self::_get_backup_folderpath($bfolder); $rand_str = NOW . "-" . sha1(uniqid(rand(), true) . uniqid(rand(), true)); $tarfile = SIMPLE_STORE . "/backup/" . $rand_str . "--" . urlencode(str_replace("/", "__", $folder_path)) . "--" . sys_date("Y-m-d---H-i-s") . ".tar"; $cachefile = SIMPLE_CACHE . "/backup/" . $rand_str . "--" . urlencode(str_replace("/", "__", $folder_path)) . "--" . sys_date("Y-m-d---H-i-s") . "_content.xml"; $files = array(); file_put_contents($cachefile, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<data>\n", LOCK_EX); foreach ($folders as $folder) { $data = self::_build_backupdata($folder); $files = array_merge($files, $data["files"]); sys_file_append($cachefile, $data["output"]); } sys_file_append($cachefile, "</data>\n"); $cmd = sys_find_bin("tar") . " -cf " . modify::realfilename($tarfile); $files = array_merge(array($cachefile), $files); foreach ($files as $file) { $cmd .= " " . str_replace("\\", "/", modify::realfilename($file)); } if (DEBUG) { self::_out("TAR: " . $cmd . "\n\n"); } echo sys_exec($cmd); if (file_exists($cachefile)) { unlink($cachefile); } $message = "{t}Backup{/t}: " . $folder_path . " [" . $bfolder["id"] . "]"; sys_log_message_log("info", $message); self::_out($message); return ""; }
function sys_log_message($component, $message, $message_trace, $username, $forcedb, $time = 0) { if ($username == "") { if (isset($_SESSION["username"])) { $username = $_SESSION["username"]; } else { $username = "******"; } } if (USE_SYSLOG_FUNCTION) { syslog(LOG_WARNING, $_SERVER["SERVER_NAME"] . " (" . $_SERVER["SERVER_ADDR"] . ") " . $component . ", user: "******"\r\n" . $message . "\r\n" . $message_trace . "\r\n"); return; } if ($forcedb and defined("SETUP_DB_HOST") and !empty(sys::$db) and (is_resource(sys::$db) or is_object(sys::$db))) { $id = sql_genID("simple_sys_events") * 100; $row = db_select_first("simple_sys_tree", "id", "ftype=@ftype@", "lft asc", array("ftype" => "sys_events")); if (!empty($row["id"])) { $error_sql = db_insert("simple_sys_events", array("created" => $time, "servername" => $_SERVER["SERVER_NAME"], "serverip" => $_SERVER["SERVER_ADDR"], "username" => $username, "id" => $id, "component" => $component, "message" => $message, "message_trace" => $message_trace)); if ($error_sql == "") { db_search_update("simple_sys_events", $id, array(), array("created" => "datetime", "component" => "text", "message" => "text", "username" => "text", "serverip" => "text", "servername" => "text")); } else { echo q($message) . "<br>" . $error_sql . "<br>"; } } } else { $out = serialize(array($component, str_replace(array("\n", "\r"), "", $message), str_replace(array("\n", "\r"), "", nl2br($message_trace)), $username, NOW)); // current directory is changed in destructor chdir(dirname(__FILE__) . "/../../"); if (sys_file_append(SIMPLE_CACHE . "/debug/error.txt", $out . "\r\n")) { return; } $message = $_SERVER["SERVER_NAME"] . " (" . $_SERVER["SERVER_ADDR"] . ") " . $component . ", user: "******"\r\n" . $message . "\r\n" . $message_trace . "\r\n"; echo $message . $message_trace; echo q($message); @error_log($message, 3, SIMPLE_CACHE . "/debug/php_error.log"); } }