$data = (DB == "" || in_array($name, (array) $_POST["data"]));
if ($table || $data) {
if ($ext == "tar") {
- ob_start();
+ $tmp_file = new TmpFile;
+ ob_start(array($tmp_file, 'write'), 1e5);
}
$adminer->dumpTable($name, ($table ? $_POST["table_style"] : ""), (is_view($table_status) ? 2 : 0));
if (is_view($table_status)) {
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
}
if ($ext == "tar") {
- tar_file((DB != "" ? "" : "$db/") . "$name.csv", ob_get_clean());
+ ob_end_flush();
+ tar_file((DB != "" ? "" : "$db/") . "$name.csv", $tmp_file);
} elseif ($is_sql) {
echo "\n";
}
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
}
-/** Get string to add a file in TAR
-* @param string
+/** Add a file to TAR
* @param string
+* @param TmpFile
* @return null prints the output
*/
-function tar_file($filename, $contents) {
- $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
+function tar_file($filename, $tmp_file) {
+ $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct($tmp_file->size), 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 ";
echo $return;
echo str_repeat("\0", 512 - strlen($return));
- echo $contents;
- echo str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
+ $tmp_file->send();
+ echo str_repeat("\0", 511 - ($tmp_file->size + 511) % 512);
}
/** Get INI bytes value
--- /dev/null
+<?php
+
+class TmpFile {
+ var $handler;
+ var $size;
+
+ function TmpFile() {
+ $this->handler = tmpfile();
+ }
+
+ function write($contents) {
+ $this->size += strlen($contents);
+ fwrite($this->handler, $contents);
+ }
+
+ function send() {
+ fseek($this->handler, 0);
+ fpassthru($this->handler);
+ fclose($this->handler);
+ }
+}
*/
include "./include/bootstrap.inc.php";
+include "./include/tmpfile.inc.php";
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
$inout = "IN|OUT|INOUT";
Disable SQL export when applying functions in select
Allow using lang() in plugins (customization)
Remove bzip2 compression support
+Constraint memory used in TAR export
Allow exporting views dependent on each other (bug #3459151)
MySQL: Optimize create table page and Editor navigation
MySQL: Display bit type as binary number
Blob download and image display in edit form (important for Editor with hidden fields in select and SQL command)
Add title to Logout, edit (in select) and select (in menu) for style "hever"
Export by GET parameters
-Files are missing in TAR due to exhausted memory - can be fixed by creating a temporary file
Draggable columns in alter table (thanks to Michal Manak)
<option class> for system databases and schemas - information_schema and driver-specific (thanks to Vaclav Novotny)
Define foreign keys name - http://forum.zdrojak.root.cz/index.php?topic=185.msg1255#msg1255