⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 export.php

📁 一个用PHP编写的
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/* $Id: export.php,v 2.38.2.2 2006/04/14 09:45:23 lem9 Exp $ */// vim: expandtab sw=4 ts=4 sts=4:/** * Get the variables sent or posted to this script and a core script */require_once('./libraries/common.lib.php');require_once('./libraries/zip.lib.php');PMA_checkParameters(array('what', 'export_type'));// What type of export are we doing?if ($what == 'excel') {    $type = 'csv';} else {    $type = $what;}// Get the functions specific to the export typerequire('./libraries/export/' . PMA_securePath($type) . '.php');// Generate error urlif ($export_type == 'server') {    $err_url = 'server_export.php?' . PMA_generate_common_url();} elseif ($export_type == 'database' && isset($db) && strlen($db)) {    $err_url = 'db_details_export.php?' . PMA_generate_common_url($db);} elseif ($export_type == 'table' && isset($db) && strlen($db) && isset($table) && strlen($table)) {    $err_url = 'tbl_properties_export.php?' . PMA_generate_common_url($db, $table);} else {    die('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']);}// Start with empty buffer$dump_buffer = '';$dump_buffer_len = 0;// We send fake headers to avoid browser timeout when buffering$time_start = time();/** * Output handler for all exports, if needed buffering, it stores data into * $dump_buffer, otherwise it prints thems out. * * @param   string  the insert statement * * @return  bool    Whether output suceeded */function PMA_exportOutputHandler($line){    global $time_start, $dump_buffer, $dump_buffer_len, $save_filename;    // Kanji encoding convert feature    if ($GLOBALS['output_kanji_conversion']) {        $line = PMA_kanji_str_conv($line, $GLOBALS['knjenc'], isset($GLOBALS['xkana']) ? $GLOBALS['xkana'] : '');    }    // If we have to buffer data, we will perform everything at once at the end    if ($GLOBALS['buffer_needed']) {        $dump_buffer .= $line;        if ($GLOBALS['onfly_compression']) {            $dump_buffer_len += strlen($line);            if ($dump_buffer_len > $GLOBALS['memory_limit']) {                if ($GLOBALS['output_charset_conversion']) {                    $dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);                }                // as bzipped                if ($GLOBALS['compression'] == 'bzip'  && @function_exists('bzcompress')) {                    $dump_buffer = bzcompress($dump_buffer);                }                // as a gzipped file                elseif ($GLOBALS['compression'] == 'gzip' && @function_exists('gzencode')) {                    // without the optional parameter level because it bug                    $dump_buffer = gzencode($dump_buffer);                }                if ($GLOBALS['save_on_server']) {                    $write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer);                    if (!$write_result || ($write_result != strlen($dump_buffer))) {                        $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));                        $GLOBALS['show_error_header'] = TRUE;                        return FALSE;                    }                } else {                    echo $dump_buffer;                }                $dump_buffer = '';                $dump_buffer_len = 0;            }        } else {            $time_now = time();            if ($time_start >= $time_now + 30) {                $time_start = $time_now;                header('X-pmaPing: Pong');            } // end if        }    } else {        if ($GLOBALS['asfile']) {            if ($GLOBALS['save_on_server'] && strlen($line) > 0) {                $write_result = @fwrite($GLOBALS['file_handle'], $line);                if (!$write_result || ($write_result != strlen($line))) {                    $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));                    $GLOBALS['show_error_header'] = TRUE;                    return FALSE;                }                $time_now = time();                if ($time_start >= $time_now + 30) {                    $time_start = $time_now;                    header('X-pmaPing: Pong');                } // end if            } else {                // We export as file - output normally                if ($GLOBALS['output_charset_conversion']) {                    $line = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $line);                }                echo $line;            }        } else {            // We export as html - replace special chars            echo htmlspecialchars($line);        }    }    return TRUE;} // end of the 'PMA_exportOutputHandler()' function// Will we save dump on server?$save_on_server = isset($cfg['SaveDir']) && !empty($cfg['SaveDir']) && !empty($onserver);// Ensure compressed formats are associated with the download featureif (empty($asfile)) {    if ($save_on_server) {        $asfile = TRUE;    } elseif (isset($compression) && ($compression == 'zip' | $compression == 'gzip' | $compression == 'bzip')) {        $asfile = TRUE;    } else {        $asfile = FALSE;    }} else {    $asfile = TRUE;}// Defines the default <CR><LF> format. For SQL always use \n as MySQL wants this on all platforms.if ($what == 'sql') {    $crlf = "\n";} else {    $crlf = PMA_whichCrlf();}$output_kanji_conversion = function_exists('PMA_kanji_str_conv') && $type != 'xls';// Do we need to convert charset?$output_charset_conversion = $asfile &&    $cfg['AllowAnywhereRecoding'] && $allow_recoding    && isset($charset_of_file) && $charset_of_file != $charset    && $type != 'xls';// Set whether we will need buffering$buffer_needed = isset($compression) && ($compression == 'zip' | $compression == 'gzip' | $compression == 'bzip');// Use on fly compression?$onfly_compression = $GLOBALS['cfg']['CompressOnFly'] && isset($compression) && ($compression == 'gzip' | $compression == 'bzip');if ($onfly_compression) {    $memory_limit = trim(@ini_get('memory_limit'));    // 2 MB as default    if (empty($memory_limit)) {        $memory_limit = 2 * 1024 * 1024;    }    if (strtolower(substr($memory_limit, -1)) == 'm') {        $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024;    } elseif (strtolower(substr($memory_limit, -1)) == 'k') {        $memory_limit = (int)substr($memory_limit, 0, -1) * 1024;    } elseif (strtolower(substr($memory_limit, -1)) == 'g') {        $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024;    } else {        $memory_limit = (int)$memory_limit;    }    // Some of memory is needed for other thins and as treshold.    // Nijel: During export I had allocated (see memory_get_usage function)    //        approx 1.2MB so this comes from that.    if ($memory_limit > 1500000) {        $memory_limit -= 1500000;    }    // Some memory is needed for compression, assume 1/3    $memory_limit *= 2/3;}// Generate filename and mime type if neededif ($asfile) {    $pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);    if ($export_type == 'server') {        if (isset($remember_template)) {            setcookie('pma_server_filename_template', $filename_template, 0, $GLOBALS['cookie_path'], '', $GLOBALS['is_https']);        }        $filename = str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template));    } elseif ($export_type == 'database') {        if (isset($remember_template)) {            setcookie('pma_db_filename_template', $filename_template, 0, $GLOBALS['cookie_path'], '', $GLOBALS['is_https']);        }        $filename = str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template)));    } else {        if (isset($remember_template)) {            setcookie('pma_table_filename_template', $filename_template, 0, $GLOBALS['cookie_path'], '', $GLOBALS['is_https']);        }        $filename = str_replace('__TABLE__', $table, str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template))));    }    // convert filename to iso-8859-1, it is safer    if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)) {        $filename = PMA_convert_string($charset, 'iso-8859-1', $filename);    } else {        $filename = PMA_convert_string($convcharset, 'iso-8859-1', $filename);    }    // Generate basic dump extension    if ($type == 'csv') {        $filename  .= '.csv';        $mime_type = 'text/comma-separated-values';    } elseif ($type == 'htmlexcel') {        $filename  .= '.xls';        $mime_type = 'application/vnd.ms-excel';    } elseif ($type == 'htmlword') {        $filename  .= '.doc';        $mime_type = 'application/vnd.ms-word';    } elseif ($type == 'xls') {        $filename  .= '.xls';        $mime_type = 'application/vnd.ms-excel';    } elseif ($type == 'xml') {        $filename  .= '.xml';        $mime_type = 'text/xml';    } elseif ($type == 'latex') {        $filename  .= '.tex';        $mime_type = 'application/x-tex';    } elseif ($type == 'pdf') {        $filename  .= '.pdf';        $mime_type = 'application/pdf';    } else {        $filename  .= '.sql';        // text/x-sql is correct MIME type, however safari ignores further        // Content-Disposition header, so we must force it to download it this        // way...        $mime_type = PMA_USR_BROWSER_AGENT == 'SAFARI'                        ? 'application/octet-stream'                        : 'text/x-sql';    }    // If dump is going to be compressed, set correct encoding or mime_type and add    // compression to extension    $content_encoding = '';    if (isset($compression) && $compression == 'bzip') {        $filename  .= '.bz2';        // browsers don't like this:        //$content_encoding = 'x-bzip2';        $mime_type = 'application/x-bzip2';    } elseif (isset($compression) && $compression == 'gzip') {        $filename  .= '.gz';        // Needed to avoid recompression by server modules like mod_gzip.        // It seems necessary to check about zlib.output_compression        // to avoid compressing twice        if (!@ini_get('zlib.output_compression')) {            $content_encoding = 'x-gzip';            $mime_type = 'application/x-gzip';        }    } elseif (isset($compression) && $compression == 'zip') {        $filename  .= '.zip';        $mime_type = 'application/zip';    }}// Open file on server if neededif ($save_on_server) {    $save_filename = PMA_userDir($cfg['SaveDir']) . preg_replace('@[/\\\\]@', '_', $filename);    unset($message);    if (file_exists($save_filename) && empty($onserverover)) {        $message = sprintf($strFileAlreadyExists, htmlspecialchars($save_filename));        $GLOBALS['show_error_header'] = TRUE;    } else {        if (is_file($save_filename) && !is_writable($save_filename)) {            $message = sprintf($strNoPermission, htmlspecialchars($save_filename));            $GLOBALS['show_error_header'] = TRUE;        } else {            if (!$file_handle = @fopen($save_filename, 'w')) {                $message = sprintf($strNoPermission, htmlspecialchars($save_filename));                $GLOBALS['show_error_header'] = TRUE;            }        }    }    if (isset($message)) {        $js_to_run = 'functions.js';        require_once('./libraries/header.inc.php');        if ($export_type == 'server') {            $active_page = 'server_export.php';            require('./server_export.php');        } elseif ($export_type == 'database') {            $active_page = 'db_details_export.php';            require('./db_details_export.php');        } else {            $active_page = 'tbl_properties_export.php';            require('./tbl_properties_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        if (!empty($content_encoding)) {            header('Content-Encoding: ' . $content_encoding);        }        header('Content-Type: ' . $mime_type);        header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');        // lem9: Tested behavior of        //       IE 5.50.4807.2300        //       IE 6.0.2800.1106 (small glitch, asks twice when I click Open)        //       IE 6.0.2900.2180        //       Firefox 1.0.6        // in http and https        header('Content-Disposition: attachment; filename="' . $filename . '"');        if (PMA_USR_BROWSER_AGENT == 'IE') {            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');            header('Pragma: public');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -