home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / phpMyAdmin / export.php < prev    next >
PHP Script  |  2008-06-23  |  25KB  |  680 lines

  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4.  * @todo    too much die here, or?
  5.  * @version $Id: export.php 11330 2008-06-20 17:53:30Z lem9 $
  6.  */
  7.  
  8. /**
  9.  * Get the variables sent or posted to this script and a core script
  10.  */
  11. require_once './libraries/common.inc.php';
  12. require_once './libraries/zip.lib.php';
  13. require_once './libraries/plugin_interface.lib.php';
  14.  
  15. PMA_checkParameters(array('what', 'export_type'));
  16.  
  17. // Scan plugins
  18. $export_list = PMA_getPlugins('./libraries/export/', array('export_type' => $export_type, 'single_table' => isset($single_table)));
  19.  
  20. // Backward compatbility
  21. $type = $what;
  22.  
  23. // Check export type
  24. if (!isset($export_list[$type])) {
  25.     die('Bad type!');
  26. }
  27.  
  28. /**
  29.  * valid compression methods
  30.  */
  31. $compression_methods = array(
  32.     'zip',
  33.     'gzip',
  34.     'bzip',
  35. );
  36.  
  37. /**
  38.  * init and variable checking
  39.  */
  40. $compression = false;
  41. $onserver = false;
  42. $save_on_server = false;
  43. $buffer_needed = false;
  44. if (empty($_REQUEST['asfile'])) {
  45.     $asfile = false;
  46. } else {
  47.     $asfile = true;
  48.     if (in_array($_REQUEST['compression'], $compression_methods)) {
  49.         $compression = $_REQUEST['compression'];
  50.         $buffer_needed = true;
  51.     }
  52.     if (!empty($_REQUEST['onserver'])) {
  53.         $onserver = $_REQUEST['onserver'];
  54.         // Will we save dump on server?
  55.         $save_on_server = ! empty($cfg['SaveDir']) && $onserver;
  56.     }
  57. }
  58.  
  59. // Does export require to be into file?
  60. if (isset($export_list[$type]['force_file']) && ! $asfile) {
  61.     $message = $strExportMustBeFile;
  62.     $GLOBALS['show_error_header'] = true;
  63.     $js_to_run = 'functions.js';
  64.     require_once './libraries/header.inc.php';
  65.     if ($export_type == 'server') {
  66.         $active_page = 'server_export.php';
  67.         require './server_export.php';
  68.     } elseif ($export_type == 'database') {
  69.         $active_page = 'db_export.php';
  70.         require './db_export.php';
  71.     } else {
  72.         $active_page = 'tbl_export.php';
  73.         require './tbl_export.php';
  74.     }
  75.     exit();
  76. }
  77.  
  78. // Generate error url and check for needed variables
  79. if ($export_type == 'server') {
  80.     $err_url = 'server_export.php?' . PMA_generate_common_url();
  81. } elseif ($export_type == 'database' && strlen($db)) {
  82.     $err_url = 'db_export.php?' . PMA_generate_common_url($db);
  83.     // Check if we have something to export
  84.     if (isset($table_select)) {
  85.         $tables = $table_select;
  86.     } else {
  87.         $tables = array();
  88.     }
  89. } elseif ($export_type == 'table' && strlen($db) && strlen($table)) {
  90.     $err_url = 'tbl_export.php?' . PMA_generate_common_url($db, $table);
  91. } else {
  92.     die('Bad parameters!');
  93. }
  94.  
  95. // Get the functions specific to the export type
  96. require './libraries/export/' . PMA_securePath($type) . '.php';
  97.  
  98. /**
  99.  * Increase time limit for script execution and initializes some variables
  100.  */
  101. @set_time_limit($cfg['ExecTimeLimit']);
  102. if (!empty($cfg['MemoryLimit'])) {
  103.     @ini_set('memory_limit', $cfg['MemoryLimit']);
  104. }
  105.  
  106. // Start with empty buffer
  107. $dump_buffer = '';
  108. $dump_buffer_len = 0;
  109.  
  110. // We send fake headers to avoid browser timeout when buffering
  111. $time_start = time();
  112.  
  113.  
  114. /**
  115.  * Output handler for all exports, if needed buffering, it stores data into
  116.  * $dump_buffer, otherwise it prints thems out.
  117.  *
  118.  * @param   string  the insert statement
  119.  *
  120.  * @return  bool    Whether output suceeded
  121.  */
  122. function PMA_exportOutputHandler($line)
  123. {
  124.     global $time_start, $dump_buffer, $dump_buffer_len, $save_filename;
  125.  
  126.     // Kanji encoding convert feature
  127.     if ($GLOBALS['output_kanji_conversion']) {
  128.         $line = PMA_kanji_str_conv($line, $GLOBALS['knjenc'], isset($GLOBALS['xkana']) ? $GLOBALS['xkana'] : '');
  129.     }
  130.     // If we have to buffer data, we will perform everything at once at the end
  131.     if ($GLOBALS['buffer_needed']) {
  132.  
  133.         $dump_buffer .= $line;
  134.         if ($GLOBALS['onfly_compression']) {
  135.  
  136.             $dump_buffer_len += strlen($line);
  137.  
  138.             if ($dump_buffer_len > $GLOBALS['memory_limit']) {
  139.                 if ($GLOBALS['output_charset_conversion']) {
  140.                     $dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
  141.                 }
  142.                 // as bzipped
  143.                 if ($GLOBALS['compression'] == 'bzip'  && @function_exists('bzcompress')) {
  144.                     $dump_buffer = bzcompress($dump_buffer);
  145.                 }
  146.                 // as a gzipped file
  147.                 elseif ($GLOBALS['compression'] == 'gzip' && @function_exists('gzencode')) {
  148.                     // without the optional parameter level because it bug
  149.                     $dump_buffer = gzencode($dump_buffer);
  150.                 }
  151.                 if ($GLOBALS['save_on_server']) {
  152.                     $write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer);
  153.                     if (!$write_result || ($write_result != strlen($dump_buffer))) {
  154.                         $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));
  155.                         $GLOBALS['show_error_header'] = true;
  156.                         return false;
  157.                     }
  158.                 } else {
  159.                     echo $dump_buffer;
  160.                 }
  161.                 $dump_buffer = '';
  162.                 $dump_buffer_len = 0;
  163.             }
  164.         } else {
  165.             $time_now = time();
  166.             if ($time_start >= $time_now + 30) {
  167.                 $time_start = $time_now;
  168.                 header('X-pmaPing: Pong');
  169.             } // end if
  170.         }
  171.     } else {
  172.         if ($GLOBALS['asfile']) {
  173.             if ($GLOBALS['output_charset_conversion']) {
  174.                 $line = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $line);
  175.             }
  176.             if ($GLOBALS['save_on_server'] && strlen($line) > 0) {
  177.                 $write_result = @fwrite($GLOBALS['file_handle'], $line);
  178.                 if (!$write_result || ($write_result != strlen($line))) {
  179.                     $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));
  180.                     $GLOBALS['show_error_header'] = true;
  181.                     return false;
  182.                 }
  183.                 $time_now = time();
  184.                 if ($time_start >= $time_now + 30) {
  185.                     $time_start = $time_now;
  186.                     header('X-pmaPing: Pong');
  187.                 } // end if
  188.             } else {
  189.                 // We export as file - output normally
  190.                 echo $line;
  191.             }
  192.         } else {
  193.             // We export as html - replace special chars
  194.             echo htmlspecialchars($line);
  195.         }
  196.     }
  197.     return true;
  198. } // end of the 'PMA_exportOutputHandler()' function
  199.  
  200. // Defines the default <CR><LF> format. For SQL always use \n as MySQL wants this on all platforms.
  201. if ($what == 'sql') {
  202.     $crlf = "\n";
  203. } else {
  204.     $crlf = PMA_whichCrlf();
  205. }
  206.  
  207. $output_kanji_conversion = function_exists('PMA_kanji_str_conv') && $type != 'xls';
  208.  
  209. // Do we need to convert charset?
  210. $output_charset_conversion = $asfile &&
  211.     $cfg['AllowAnywhereRecoding'] && $allow_recoding
  212.     && isset($charset_of_file) && $charset_of_file != $charset
  213.     && $type != 'xls';
  214.  
  215. // Use on fly compression?
  216. $onfly_compression = $GLOBALS['cfg']['CompressOnFly'] && ($compression == 'gzip' | $compression == 'bzip');
  217. if ($onfly_compression) {
  218.     $memory_limit = trim(@ini_get('memory_limit'));
  219.     // 2 MB as default
  220.     if (empty($memory_limit)) {
  221.         $memory_limit = 2 * 1024 * 1024;
  222.     }
  223.  
  224.     if (strtolower(substr($memory_limit, -1)) == 'm') {
  225.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024;
  226.     } elseif (strtolower(substr($memory_limit, -1)) == 'k') {
  227.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024;
  228.     } elseif (strtolower(substr($memory_limit, -1)) == 'g') {
  229.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024;
  230.     } else {
  231.         $memory_limit = (int)$memory_limit;
  232.     }
  233.  
  234.     // Some of memory is needed for other thins and as treshold.
  235.     // Nijel: During export I had allocated (see memory_get_usage function)
  236.     //        approx 1.2MB so this comes from that.
  237.     if ($memory_limit > 1500000) {
  238.         $memory_limit -= 1500000;
  239.     }
  240.  
  241.     // Some memory is needed for compression, assume 1/3
  242.     $memory_limit /= 8;
  243. }
  244.  
  245. // Generate filename and mime type if needed
  246. if ($asfile) {
  247.     $pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);
  248.     if ($export_type == 'server') {
  249.         if (isset($remember_template)) {
  250.             PMA_setCookie('pma_server_filename_template', $filename_template);
  251.         }
  252.         $filename = str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template));
  253.     } elseif ($export_type == 'database') {
  254.         if (isset($remember_template)) {
  255.             PMA_setCookie('pma_db_filename_template', $filename_template);
  256.         }
  257.         $filename = str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template)));
  258.     } else {
  259.         if (isset($remember_template)) {
  260.             PMA_setCookie('pma_table_filename_template', $filename_template);
  261.         }
  262.         $filename = str_replace('__TABLE__', $table, str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template))));
  263.     }
  264.  
  265.     // convert filename to iso-8859-1, it is safer
  266.     if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)) {
  267.         $filename = PMA_convert_string($charset, 'iso-8859-1', $filename);
  268.     } else {
  269.         $filename = PMA_convert_string($convcharset, 'iso-8859-1', $filename);
  270.     }
  271.  
  272.     // Grab basic dump extension and mime type
  273.     $filename  .= '.' . $export_list[$type]['extension'];
  274.     $mime_type  = $export_list[$type]['mime_type'];
  275.  
  276.     // If dump is going to be compressed, set correct encoding or mime_type and add
  277.     // compression to extension
  278.     $content_encoding = '';
  279.     if ($compression == 'bzip') {
  280.         $filename  .= '.bz2';
  281.         // browsers don't like this:
  282.         //$content_encoding = 'x-bzip2';
  283.         $mime_type = 'application/x-bzip2';
  284.     } elseif ($compression == 'gzip') {
  285.         $filename  .= '.gz';
  286.         // Needed to avoid recompression by server modules like mod_gzip.
  287.         // It seems necessary to check about zlib.output_compression
  288.         // to avoid compressing twice
  289.         if (!@ini_get('zlib.output_compression')) {
  290.             // On Firefox 3, sending this content encoding corrupts the .gz
  291.             // (as tested on Windows and Linux) but detect GECKO 1.9
  292.             if (! (PMA_USR_BROWSER_AGENT == 'GECKO' && PMA_USR_BROWSER_VER == '1.9')) {
  293.                 $content_encoding = 'x-gzip';
  294.             }
  295.             $mime_type = 'application/x-gzip';
  296.         }
  297.     } elseif ($compression == 'zip') {
  298.         $filename  .= '.zip';
  299.         $mime_type = 'application/zip';
  300.     }
  301. }
  302.  
  303. // Open file on server if needed
  304. if ($save_on_server) {
  305.     $save_filename = PMA_userDir($cfg['SaveDir']) . preg_replace('@[/\\\\]@', '_', $filename);
  306.     unset($message);
  307.     if (file_exists($save_filename) && empty($onserverover)) {
  308.         $message = sprintf($strFileAlreadyExists, htmlspecialchars($save_filename));
  309.         $GLOBALS['show_error_header'] = true;
  310.     } else {
  311.         if (is_file($save_filename) && !is_writable($save_filename)) {
  312.             $message = sprintf($strNoPermission, htmlspecialchars($save_filename));
  313.             $GLOBALS['show_error_header'] = true;
  314.         } else {
  315.             if (!$file_handle = @fopen($save_filename, 'w')) {
  316.                 $message = sprintf($strNoPermission, htmlspecialchars($save_filename));
  317.                 $GLOBALS['show_error_header'] = true;
  318.             }
  319.         }
  320.     }
  321.     if (isset($message)) {
  322.         $js_to_run = 'functions.js';
  323.         require_once './libraries/header.inc.php';
  324.         if ($export_type == 'server') {
  325.             $active_page = 'server_export.php';
  326.             require './server_export.php';
  327.         } elseif ($export_type == 'database') {
  328.             $active_page = 'db_export.php';
  329.             require './db_export.php';
  330.         } else {
  331.             $active_page = 'tbl_export.php';
  332.             require './tbl_export.php';
  333.         }
  334.         exit();
  335.     }
  336. }
  337.  
  338. /**
  339.  * Send headers depending on whether the user chose to download a dump file
  340.  * or not
  341.  */
  342. if (!$save_on_server) {
  343.     if ($asfile) {
  344.         // Download
  345.         // (avoid rewriting data containing HTML with anchors and forms;
  346.         // this was reported to happen under Plesk)
  347.         ini_set('url_rewriter.tags','');
  348.  
  349.         if (!empty($content_encoding)) {
  350.             header('Content-Encoding: ' . $content_encoding);
  351.         }
  352.         header('Content-Type: ' . $mime_type);
  353.         header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  354.         // lem9: Tested behavior of
  355.         //       IE 5.50.4807.2300
  356.         //       IE 6.0.2800.1106 (small glitch, asks twice when I click Open)
  357.         //       IE 6.0.2900.2180
  358.         //       Firefox 1.0.6
  359.         // in http and https
  360.         header('Content-Disposition: attachment; filename="' . $filename . '"');
  361.         if (PMA_USR_BROWSER_AGENT == 'IE') {
  362.             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  363.             header('Pragma: public');
  364.         } else {
  365.             header('Pragma: no-cache');
  366.         }
  367.     } else {
  368.         // HTML
  369.         if ($export_type == 'database') {
  370.             $num_tables = count($tables);
  371.             if ($num_tables == 0) {
  372.                 $message = $strNoTablesFound;
  373.                 $js_to_run = 'functions.js';
  374.                 require_once './libraries/header.inc.php';
  375.                 $active_page = 'db_export.php';
  376.                 require './db_export.php';
  377.                 exit();
  378.             }
  379.         }
  380.         $backup_cfgServer = $cfg['Server'];
  381.         require_once './libraries/header.inc.php';
  382.         $cfg['Server'] = $backup_cfgServer;
  383.         unset($backup_cfgServer);
  384.         echo "\n" . '<div align="' . $cell_align_left . '">' . "\n";
  385.         //echo '    <pre>' . "\n";
  386.         echo '    <form name="nofunction">' . "\n"
  387.            // remove auto-select for now: there is no way to select
  388.            // only a part of the text; anyway, it should obey
  389.            // $cfg['TextareaAutoSelect']
  390.            //. '        <textarea name="sqldump" cols="50" rows="30" onclick="this.select();" id="textSQLDUMP" wrap="OFF">' . "\n";
  391.            . '        <textarea name="sqldump" cols="50" rows="30" id="textSQLDUMP" wrap="OFF">' . "\n";
  392.     } // end download
  393. }
  394.  
  395. // Fake loop just to allow skip of remain of this code by break, I'd really
  396. // need exceptions here :-)
  397. do {
  398.  
  399. // Add possibly some comments to export
  400. if (!PMA_exportHeader()) {
  401.     break;
  402. }
  403.  
  404. // Will we need relation & co. setup?
  405. $do_relation = isset($GLOBALS[$what . '_relation']);
  406. $do_comments = isset($GLOBALS[$what . '_comments']);
  407. $do_mime     = isset($GLOBALS[$what . '_mime']);
  408. if ($do_relation || $do_comments || $do_mime) {
  409.     require_once './libraries/relation.lib.php';
  410.     $cfgRelation = PMA_getRelationsParam();
  411. }
  412. if ($do_mime) {
  413.     require_once './libraries/transformations.lib.php';
  414. }
  415.  
  416. // Include dates in export?
  417. $do_dates   = isset($GLOBALS[$what . '_dates']);
  418.  
  419. /**
  420.  * Builds the dump
  421.  */
  422. // Gets the number of tables if a dump of a database has been required
  423. if ($export_type == 'server') {
  424.     if (isset($db_select)) {
  425.         $tmp_select = implode($db_select, '|');
  426.         $tmp_select = '|' . $tmp_select . '|';
  427.     }
  428.     // Walk over databases
  429.     foreach ($GLOBALS['PMA_List_Database']->items as $current_db) {
  430.         if ((isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|'))
  431.             || !isset($tmp_select)) {
  432.             if (!PMA_exportDBHeader($current_db)) {
  433.                 break 2;
  434.             }
  435.             if (!PMA_exportDBCreate($current_db)) {
  436.                 break 2;
  437.             }
  438.             $tables = PMA_DBI_get_tables($current_db);
  439.             $views = array();
  440.             foreach ($tables as $table) {
  441.                 // if this is a view, collect it for later; views must be exported
  442.                 // after the tables
  443.                 $is_view = PMA_Table::isView($current_db, $table);
  444.                 if ($is_view) {
  445.                     $views[] = $table;
  446.                 }
  447.                 if (isset($GLOBALS[$what . '_structure'])) {
  448.                     // for a view, export a stand-in definition of the table
  449.                     // to resolve view dependencies
  450.                     if (!PMA_exportStructure($current_db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
  451.                         break 3;
  452.                     }
  453.                 }
  454.                 if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
  455.                     $local_query  = 'SELECT * FROM ' . PMA_backquote($current_db) . '.' . PMA_backquote($table);
  456.                     if (!PMA_exportData($current_db, $table, $crlf, $err_url, $local_query)) {
  457.                         break 3;
  458.                     }
  459.                 }
  460.             }
  461.             foreach($views as $view) {
  462.                 // no data export for a view
  463.                 if (isset($GLOBALS[$what . '_structure'])) {
  464.                     if (!PMA_exportStructure($current_db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
  465.                         break 3;
  466.                     }
  467.                 }
  468.             }
  469.             if (!PMA_exportDBFooter($current_db)) {
  470.                 break 2;
  471.             }
  472.         }
  473.     }
  474. } elseif ($export_type == 'database') {
  475.     if (!PMA_exportDBHeader($db)) {
  476.         break;
  477.     }
  478.     $i = 0;
  479.     $views = array();
  480.     // $tables contains the choices from the user (via $table_select)
  481.     foreach ($tables as $table) {
  482.         // if this is a view, collect it for later; views must be exported after
  483.         // the tables
  484.         $is_view = PMA_Table::isView($db, $table);
  485.         if ($is_view) {
  486.             $views[] = $table;
  487.         }
  488.         if (isset($GLOBALS[$what . '_structure'])) {
  489.             // for a view, export a stand-in definition of the table
  490.             // to resolve view dependencies
  491.             if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
  492.                 break 2;
  493.             }
  494.         }
  495.         if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
  496.             $local_query  = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table);
  497.             if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
  498.                 break 2;
  499.             }
  500.         }
  501.     }
  502.     foreach ($views as $view) {
  503.         // no data export for a view
  504.         if (isset($GLOBALS[$what . '_structure'])) {
  505.             if (!PMA_exportStructure($db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
  506.                 break 2;
  507.             }
  508.         }
  509.     }
  510.  
  511.     if (!PMA_exportDBFooter($db)) {
  512.         break;
  513.     }
  514. } else {
  515.     if (!PMA_exportDBHeader($db)) {
  516.         break;
  517.     }
  518.     // We export just one table
  519.  
  520.     if ($limit_to > 0 && $limit_from >= 0) {
  521.         $add_query  = ' LIMIT '
  522.                     . (($limit_from > 0) ? $limit_from . ', ' : '')
  523.                     . $limit_to;
  524.     } else {
  525.         $add_query  = '';
  526.     }
  527.  
  528.     $is_view = PMA_Table::isView($db, $table);
  529.     if (isset($GLOBALS[$what . '_structure'])) {
  530.         if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'create_view' : 'create_table', $export_type)) {
  531.             break;
  532.         }
  533.     }
  534.     // If this is an export of a single view, we have to export data;
  535.     // for example, a PDF report
  536.     if (isset($GLOBALS[$what . '_data'])) {
  537.         if (!empty($sql_query)) {
  538.             // only preg_replace if needed
  539.             if (!empty($add_query)) {
  540.                 // remove trailing semicolon before adding a LIMIT
  541.                 $sql_query = preg_replace('%;\s*$%', '', $sql_query);
  542.             }
  543.             $local_query = $sql_query . $add_query;
  544.             PMA_DBI_select_db($db);
  545.         } else {
  546.             $local_query  = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table) . $add_query;
  547.         }
  548.         if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
  549.             break;
  550.         }
  551.     }
  552.     if (!PMA_exportDBFooter($db)) {
  553.         break;
  554.     }
  555. }
  556. if (!PMA_exportFooter()) {
  557.     break;
  558. }
  559.  
  560. } while (false);
  561. // End of fake loop
  562.  
  563. if ($save_on_server && isset($message)) {
  564.     $js_to_run = 'functions.js';
  565.     require_once './libraries/header.inc.php';
  566.     if ($export_type == 'server') {
  567.         $active_page = 'server_export.php';
  568.         require './server_export.php';
  569.     } elseif ($export_type == 'database') {
  570.         $active_page = 'db_export.php';
  571.         require './db_export.php';
  572.     } else {
  573.         $active_page = 'tbl_export.php';
  574.         require './tbl_export.php';
  575.     }
  576.     exit();
  577. }
  578.  
  579. /**
  580.  * Send the dump as a file...
  581.  */
  582. if (!empty($asfile)) {
  583.     // Convert the charset if required.
  584.     if ($output_charset_conversion) {
  585.         $dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
  586.     }
  587.  
  588.     // Do the compression
  589.     // 1. as a zipped file
  590.     if ($compression == 'zip') {
  591.         if (@function_exists('gzcompress')) {
  592.             $zipfile = new zipfile();
  593.             $zipfile -> addFile($dump_buffer, substr($filename, 0, -4));
  594.             $dump_buffer = $zipfile -> file();
  595.         }
  596.     }
  597.     // 2. as a bzipped file
  598.     elseif ($compression == 'bzip') {
  599.         if (@function_exists('bzcompress')) {
  600.             $dump_buffer = bzcompress($dump_buffer);
  601.             if ($dump_buffer === -8) {
  602.                 require_once './libraries/header.inc.php';
  603.                 echo sprintf($strBzError, '<a href="http://bugs.php.net/bug.php?id=17300" target="_blank">17300</a>');
  604.                 require_once './libraries/footer.inc.php';
  605.             }
  606.         }
  607.     }
  608.     // 3. as a gzipped file
  609.     elseif ($compression == 'gzip') {
  610.         if (@function_exists('gzencode')) {
  611.             // without the optional parameter level because it bug
  612.             $dump_buffer = gzencode($dump_buffer);
  613.         }
  614.     }
  615.  
  616.     /* If ve saved on server, we have to close file now */
  617.     if ($save_on_server) {
  618.         $write_result = @fwrite($file_handle, $dump_buffer);
  619.         fclose($file_handle);
  620.         if (strlen($dump_buffer) !=0 && (!$write_result || ($write_result != strlen($dump_buffer)))) {
  621.             $message = sprintf($strNoSpace, htmlspecialchars($save_filename));
  622.         } else {
  623.             $message = sprintf($strDumpSaved, htmlspecialchars($save_filename));
  624.         }
  625.  
  626.         $js_to_run = 'functions.js';
  627.         require_once './libraries/header.inc.php';
  628.         if ($export_type == 'server') {
  629.             $active_page = 'server_export.php';
  630.             require_once './server_export.php';
  631.         } elseif ($export_type == 'database') {
  632.             $active_page = 'db_export.php';
  633.             require_once './db_export.php';
  634.         } else {
  635.             $active_page = 'tbl_export.php';
  636.             require_once './tbl_export.php';
  637.         }
  638.         exit();
  639.     } else {
  640.         echo $dump_buffer;
  641.     }
  642. }
  643. /**
  644.  * Displays the dump...
  645.  */
  646. else {
  647.     /**
  648.      * Close the html tags and add the footers in dump is displayed on screen
  649.      */
  650.     //echo '    </pre>' . "\n";
  651.     echo '</textarea>' . "\n"
  652.        . '    </form>' . "\n";
  653.     echo '</div>' . "\n";
  654.     echo "\n";
  655. ?>
  656. <script type="text/javascript">
  657. //<![CDATA[
  658.     var bodyWidth=null; var bodyHeight=null;
  659.     if (document.getElementById('textSQLDUMP')) {
  660.         bodyWidth  = self.innerWidth;
  661.         bodyHeight = self.innerHeight;
  662.         if (!bodyWidth && !bodyHeight) {
  663.             if (document.compatMode && document.compatMode == "BackCompat") {
  664.                 bodyWidth  = document.body.clientWidth;
  665.                 bodyHeight = document.body.clientHeight;
  666.             } else if (document.compatMode && document.compatMode == "CSS1Compat") {
  667.                 bodyWidth  = document.documentElement.clientWidth;
  668.                 bodyHeight = document.documentElement.clientHeight;
  669.             }
  670.         }
  671.         document.getElementById('textSQLDUMP').style.width=(bodyWidth-50) + 'px';
  672.         document.getElementById('textSQLDUMP').style.height=(bodyHeight-100) + 'px';
  673.     }
  674. //]]>
  675. </script>
  676. <?php
  677.     require_once './libraries/footer.inc.php';
  678. } // end if
  679. ?>
  680.