2

これが以前に尋ねられたのを見たことがありますが、いくつかの解決策を試した後、これを適切に機能させるのに苦労しています。問題は、データを csv 形式に正しくエクスポートできないことです。ob_end_clean を追加する前は、html で csv にエクスポートされていましたが、今では csv ではなく、テキストだけが表示されます。

必要なファイルのコードは次のとおりです。

if (isset($_POST["hidden"])) {

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

    $fp = fopen('php://output','w');

    foreach ($list as $row) {
        ob_end_clean();
        fputcsv($fp, $row);
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

}

現在、エクスポートを行うと、データは var_dump() のように画面に戻されます。私は単にこれをcsvファイルに入れたいだけで、htmlをそこら中に置く必要はありません。

4

3 に答える 3

22

動作しました!

ページ上の何よりも前にcsvコードを呼び出しました。:)次に、テーブルへの接続を行い、次にコードのロジックを行いました。メインファイルにob_startまたはob_flushがなかったため、大きな違いがありました。whileループの前にob_cleanがあり、ヘッダーを宣言した後にexit()を実行しました。うまくいけば、これはそれをうまく説明します。

これが私のコードです。

if (isset($_POST["hidden"])) {
    $sql = "SELECT * FROM `newsletter`";
    $result = mysql_query($sql);

    ob_end_clean();

    $fp = fopen('php://output','w');

    while ($list = mysql_fetch_assoc($result)) {
        fputcsv($fp, $list);
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

    exit();
}
于 2012-11-09T22:16:18.507 に答える