2

MySQLデータベースにデータを書き込むフォームがあります。CSV最終的な提出後に、ユーザーが自分のデータをフォーマットでダウンロードできるようにしたいと思います。

私のコードは現在、データベースのコンテンツをブラウザにダンプしています。つまり、csvファイルではなくページに書き込まれています。それらをリンクに送信し、ファイルをダウンロードするオプションを与えたいと思います。

これが私の現在のコードです:

$dbo = new PDO('mysql:host=localhost;dbname=db1', $username, $password);
$sql = "SELECT * FROM table1";
$qry = $dbo->prepare($sql);

// Execute the statement
$qry->execute();
var_dump($qry->fetch(PDO::FETCH_ASSOC));
$data = fopen('/tmp/db_user_export_".time().".csv', 'w');
while ($row = $qry->fetch(PDO::FETCH_ASSOC))
{
    echo "Success";
    // Export every row to a file
    fputcsv($data, $row);
}

現在の結果は、テーブルからのすべてのデータのダンプを含むページです。目的の場所にファイルが作成されていません。どこが間違っているのですか?

4

1 に答える 1

2

クライアントはそれがCSVファイルであることを知りません(結局のところ、それは単なるテキストです!)。

出力の前に(スクリプトの上部に)これを追加してみてください。

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

基本的に、CSVファイルを送信するデータをクライアント/ブラウザに通知します。

それはうまくいくはずです。

ヘッダーの詳細については、http://php.net/manual/en/function.header.phpを参照してください。

于 2012-09-22T06:57:33.643 に答える