diff --git a/dump.inc.php b/dump.inc.php
index 5c19e984..7d3d2796 100644
--- a/dump.inc.php
+++ b/dump.inc.php
@@ -121,10 +121,26 @@ function dump($db, $style) {
echo "\n\n";
}
+function tar_file($filename, $contents) {
+ $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
+ $checksum = 8*32; // space for checksum itself
+ for ($i=0; $i < strlen($return); $i++) {
+ $checksum += ord($return{$i});
+ }
+ $return .= sprintf("%06o", $checksum) . "\0 ";
+ $return .= str_repeat("\0", 512 - strlen($return));
+ $return .= $contents;
+ if (strlen($contents) % 512) {
+ $return .= str_repeat("\0", 512 - strlen($contents) % 512);
+ }
+ return $return;
+}
+
if ($_POST) {
header("Content-Type: text/plain; charset=utf-8");
$filename = (strlen($_GET["db"]) ? preg_replace('~[^a-z0-9_]~i', '-', (strlen($_GET["dump"]) ? $_GET["dump"] : $_GET["db"])) : "dump");
- header("Content-Disposition: inline; filename=$filename.sql");
+ $filename .= ($_POST["format"] == "sql" ? ".sql" : (!strlen($_GET["db"]) || count(array_filter($_POST["data"])) >= 1 ? ".tar" : ".csv"));
+ header("Content-Disposition: " . ($_POST["output"] == "file" ? "attachment" : "inline") . "; filename=$filename");
$max_packet = 16777216;
echo "SET NAMES utf8;\n";
@@ -175,14 +191,14 @@ foreach (array('', 'USE', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) {
echo "
" . ($val ? $val : lang('skip')) . " | ";
}
echo "\n";
-if (!isset($_GET["db"]) && !isset($_SESSION["databases"][$_GET["server"]])) {
+if (!strlen($_GET["db"]) && !isset($_SESSION["databases"][$_GET["server"]])) {
$_SESSION["databases"][$_GET["server"]] = get_vals("SHOW DATABASES");
}
-foreach ((isset($_GET["db"]) ? array($_GET["db"]) : $_SESSION["databases"][$_GET["server"]]) as $db) {
+foreach ((strlen($_GET["db"]) ? array($_GET["db"]) : $_SESSION["databases"][$_GET["server"]]) as $db) {
if ($db != "information_schema" || $mysql->server_info < 5) {
echo "" . htmlspecialchars($db) . " | ";
foreach (array('', 'USE', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) {
- echo ' | ";
+ echo ' | ";
}
echo "
\n";
}
@@ -197,15 +213,17 @@ foreach (array('', 'TRUNCATE, INSERT', 'INSERT', 'UPDATE') as $val) {
echo "" . ($val ? $val : lang('skip')) . " | ";
}
echo "\n";
-foreach ((isset($_GET["db"]) ? get_vals("SHOW TABLES") : $_SESSION["databases"][$_GET["server"]]) as $table) {
- echo "" . htmlspecialchars($table) . " | ";
- foreach (array('', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) {
- echo ' | ";
+foreach ((strlen($_GET["db"]) ? get_vals("SHOW TABLES") : $_SESSION["databases"][$_GET["server"]]) as $table) {
+ if (strlen($_GET["db"]) || $table != "information_schema" || $mysql->server_info < 5) {
+ echo "
" . htmlspecialchars($table) . " | ";
+ foreach (array('', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) {
+ echo ' | ";
+ }
+ foreach (array('', 'TRUNCATE, INSERT', 'INSERT', 'UPDATE') as $val) {
+ echo ' | ";
+ }
+ echo "
\n";
}
- foreach (array('', 'TRUNCATE, INSERT', 'INSERT', 'UPDATE') as $val) {
- echo ' | ";
- }
- echo "\n";
}
echo "\n";
?>