3

こんにちは、私は次のコードを持っています..

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 ダンプがファイルとしてダウンロードされ、表示されず、サーバー上にファイルが作成されます。例えば。リンクまたはボタンを押してこの関数を呼び出し、これらのヘッダーを追加して、SQL ダンプをファイルとしてダウンロードしますか? ここで完全に軌道に乗っていない場合は修正してください。これを行う方法についての提案をお待ちしています。

私は初心者で、PHP、mySQL、およびワードプレスでこのプラグインのさまざまな要素を作成することで、これまでに多くのことを学びました。あなたの助けは大歓迎です。検索して読んだチュートリアルを検索しましたが、機能させることができないようです。

4

2 に答える 2

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 パスを置き換えます。

于 2013-08-20T23:33:01.013 に答える
0

export_file()関数がどのように呼び出されているかによって少し異なります。ただし、管理 URL から直接呼び出される場合は&noheader=1、URL に追加できます。Excelファイルを生成するときにそれをうまく使用しています。

于 2013-08-20T07:53:14.033 に答える