SQL导出 - Wordpress插件DEV

时间:2013-08-20 02:49:15

标签: php wordpress-plugin mysqldump wordpress

嗨所以我有以下代码..

function export_file() {


    $tmpname = '/tmp/' . sha1( uniqid() ) . $ext;
    $filename = 'export.sql';
    $cmd = sprintf( "/Applications/XAMPP/xamppfiles/bin/mysqldump -h'%s' -u'%s' -p'%s' %s --single-transaction %s > %s",
        DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, $compression_pipe, $tmpname );

    exec( $cmd );
    header( 'Content-Type: application/bzip' );
    header( 'Content-Length: ' . filesize( $tmpname ) );
    header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
    readfile( $tmpname );
    unlink( $tmpname );

    exit();
}

现在,它可以工作但不下载文件。说标题已经发送。

  已经发送的

标头(输出从/Applications/XAMPP/xamppfiles/htdocs/~/wp-admin/includes/template.php:1642开始)

现在我明白已从我的主插件文件发送标题已包含我正在创建的插件所需的javascript和css文件。

 function admin_register_head() {
$siteurl = get_option('siteurl');
$css = $siteurl . '/wp-content/plugins/' . basename(dirname(__FILE__)) . '/style.css';
$script = $siteurl . '/wp-content/plugins/' . basename(dirname(__FILE__)) . '/script.js';
echo "<link rel='stylesheet' type='text/css' href='$css' />"; 
echo "<script src='$script' type='application/javascript'>"; }

如何告诉它再次使用这些标题加载页面,以便我的sql dump作为文件下载而不是在服务器上显示/文件创建。例如。按链接或按钮并调用此功能并添加这些标题,以便将sql转储下载为文件?如果我完全偏离这里,请纠正我。欢迎提出如何做到这一点的建议。

我是一个菜鸟,到目前为止,我已经学会了很多PHP,mySQL和wordpress为这个插件创建了不同的元素。非常感谢您的帮助。我搜索了一个搜索过的,阅读过的教程,但似乎无法让它工作。先谢谢!

2 个答案:

答案 0 :(得分:1)

我刚刚解决了这个问题。

if ( isset( $_GET['sql_export_export'] ) ) {
            export_file(); }

function export_file() {


        $tmpname = '/tmp/' . sha1( uniqid() ) . $ext;
        $filename = 'export.sql';
        $cmd = sprintf( "/Applications/XAMPP/xamppfiles/bin/mysqldump -h'%s' -u'%s' -p'%s' %s --single-transaction %s > %s",
            DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, $compression_pipe, $tmpname );

        exec( $cmd );
        header( 'Content-Type: application/bzip' );
        header( 'Content-Length: ' . filesize( $tmpname ) );
        header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
        readfile( $tmpname );
        unlink( $tmpname );

        exit();
    }


    function database_backup() {


    ?><a class="button" href="?sql_export_export">Export SQL</a><?php

    } 

我在我的本地使用xampp为WP构建这个插件,所以替换mysqldump路径以适合你的服务器。

答案 1 :(得分:0)

这取决于你的export_file()函数的调用方式。但如果直接从管理员URL调用,则可以将&noheader=1添加到URL。我在生成Excel文件时成功使用它。