$export_type, 'single_table' => isset($single_table) ) ); // Backward compatibility $type = $what; // Check export type if (! isset($export_plugin)) { PMA_fatalError(__('Bad type!')); } /** * valid compression methods */ $compression_methods = array( 'zip', 'gzip', 'bzip2', ); /** * init and variable checking */ $compression = false; $onserver = false; $save_on_server = false; $buffer_needed = false; // Is it a quick or custom export? if ($_REQUEST['quick_or_custom'] == 'quick') { $quick_export = true; } else { $quick_export = false; } if ($_REQUEST['output_format'] == 'astext') { $asfile = false; } else { $asfile = true; if (in_array($_REQUEST['compression'], $compression_methods)) { $compression = $_REQUEST['compression']; $buffer_needed = true; } if (($quick_export && ! empty($_REQUEST['quick_export_onserver'])) || (! $quick_export && ! empty($_REQUEST['onserver'])) ) { if ($quick_export) { $onserver = $_REQUEST['quick_export_onserver']; } else { $onserver = $_REQUEST['onserver']; } // Will we save dump on server? $save_on_server = ! empty($cfg['SaveDir']) && $onserver; } } // Does export require to be into file? if ($export_plugin->getProperties()->getForceFile() != null && ! $asfile) { $message = PMA_Message::error( __('Selected export type has to be saved in file!') ); if ($export_type == 'server') { $active_page = 'server_export.php'; include 'server_export.php'; } elseif ($export_type == 'database') { $active_page = 'db_export.php'; include 'db_export.php'; } else { $active_page = 'tbl_export.php'; include 'tbl_export.php'; } exit(); } // Generate error url and check for needed variables if ($export_type == 'server') { $err_url = 'server_export.php?' . PMA_URL_getCommon(); } elseif ($export_type == 'database' && strlen($db)) { $err_url = 'db_export.php?' . PMA_URL_getCommon($db); // Check if we have something to export if (isset($table_select)) { $tables = $table_select; } else { $tables = array(); } } elseif ($export_type == 'table' && strlen($db) && strlen($table)) { $err_url = 'tbl_export.php?' . PMA_URL_getCommon($db, $table); } else { PMA_fatalError(__('Bad parameters!')); } /** * Increase time limit for script execution and initializes some variables */ @set_time_limit($cfg['ExecTimeLimit']); if (! empty($cfg['MemoryLimit'])) { @ini_set('memory_limit', $cfg['MemoryLimit']); } register_shutdown_function('PMA_shutdown'); // Start with empty buffer $dump_buffer = ''; $dump_buffer_len = 0; // We send fake headers to avoid browser timeout when buffering $time_start = time(); } // Defines the default format. // For SQL always use \n as MySQL wants this on all platforms. if (!defined('TESTSUITE')) { if ($what == 'sql') { $crlf = "\n"; } else { $crlf = PMA_Util::whichCrlf(); } $output_kanji_conversion = function_exists('PMA_Kanji_strConv') && $type != 'xls'; // Do we need to convert charset? $output_charset_conversion = $asfile && $GLOBALS['PMA_recoding_engine'] != PMA_CHARSET_NONE && isset($charset_of_file) && $charset_of_file != 'utf-8' && $type != 'xls'; // Use on the fly compression? $GLOBALS['onfly_compression'] = $GLOBALS['cfg']['CompressOnFly'] && ($compression == 'gzip' || $compression == 'bzip2'); if ($GLOBALS['onfly_compression']) { $GLOBALS['memory_limit'] = PMA_getMemoryLimitForExport(); } // Generate filename and mime type if needed if ($asfile) { $pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']); if ($export_type == 'server') { if (isset($remember_template)) { $GLOBALS['PMA_Config']->setUserValue( 'pma_server_filename_template', 'Export/file_template_server', $filename_template ); } } elseif ($export_type == 'database') { if (isset($remember_template)) { $GLOBALS['PMA_Config']->setUserValue( 'pma_db_filename_template', 'Export/file_template_database', $filename_template ); } } else { if (isset($remember_template)) { $GLOBALS['PMA_Config']->setUserValue( 'pma_table_filename_template', 'Export/file_template_table', $filename_template ); } } $filename = PMA_Util::expandUserString($filename_template); // remove dots in filename (coming from either the template or already // part of the filename) to avoid a remote code execution vulnerability $filename = PMA_sanitizeFilename($filename, $replaceDots = true); // Grab basic dump extension and mime type // Check if the user already added extension; // get the substring where the extension would be if it was included $extension_start_pos = strlen($filename) - strlen( $export_plugin->getProperties()->getExtension() ) - 1; $user_extension = substr($filename, $extension_start_pos, strlen($filename)); $required_extension = "." . $export_plugin->getProperties()->getExtension(); if (strtolower($user_extension) != $required_extension) { $filename .= $required_extension; } $mime_type = $export_plugin->getProperties()->getMimeType(); // If dump is going to be compressed, set correct mime_type and add // compression to extension if ($compression == 'bzip2') { $filename .= '.bz2'; $mime_type = 'application/x-bzip2'; } elseif ($compression == 'gzip') { $filename .= '.gz'; $mime_type = 'application/x-gzip'; } elseif ($compression == 'zip') { $filename .= '.zip'; $mime_type = 'application/zip'; } } // Open file on server if needed if ($save_on_server) { $save_filename = PMA_Util::userDir($cfg['SaveDir']) . preg_replace('@[/\\\\]@', '_', $filename); unset($message); if (file_exists($save_filename) && ((! $quick_export && empty($_REQUEST['onserverover'])) || ($quick_export && $_REQUEST['quick_export_onserverover'] != 'saveitover')) ) { $message = PMA_Message::error( __( 'File %s already exists on server, ' . 'change filename or check overwrite option.' ) ); $message->addParam($save_filename); } else { if (is_file($save_filename) && ! is_writable($save_filename)) { $message = PMA_Message::error( __( 'The web server does not have permission ' . 'to save the file %s.' ) ); $message->addParam($save_filename); } else { if (! $file_handle = @fopen($save_filename, 'w')) { $message = PMA_Message::error( __( 'The web server does not have permission ' . 'to save the file %s.' ) ); $message->addParam($save_filename); } } } if (isset($message)) { if ($export_type == 'server') { $active_page = 'server_export.php'; include 'server_export.php'; } elseif ($export_type == 'database') { $active_page = 'db_export.php'; include 'db_export.php'; } else { $active_page = 'tbl_export.php'; include 'tbl_export.php'; } exit(); } } /** * Send headers depending on whether the user chose to download a dump file * or not */ if (! $save_on_server) { if ($asfile) { // Download // (avoid rewriting data containing HTML with anchors and forms; // this was reported to happen under Plesk) @ini_set('url_rewriter.tags', ''); $filename = PMA_sanitizeFilename($filename); PMA_downloadHeader($filename, $mime_type); } else { // HTML if ($export_type == 'database') { $num_tables = count($tables); if ($num_tables == 0) { $message = PMA_Message::error( __('No tables found in database.') ); $active_page = 'db_export.php'; include 'db_export.php'; exit(); } } $backup_cfgServer = $cfg['Server']; $cfg['Server'] = $backup_cfgServer; unset($backup_cfgServer); echo "\n" . '
' . "\n"; //echo '
' . "\n";

            /**
             * Displays a back button with all the $_REQUEST data in the URL
             * (store in a variable to also display after the textarea)
             */
            $back_button = '

[ $value) { $back_button .= '&' . urlencode($name) . '=' . urlencode($value); } $back_button .= '&repopulate=1">Back ]

'; echo $back_button; echo '
' . "\n"; echo '