5

これは、いくつかの SQL データに基づいて .CSV ファイルを作成するための私の PHP コードです。意図したとおりに機能していますが、唯一の問題は、サーバー上に .CSV ファイルを作成するだけで、ユーザーにダウンロードを促すプロンプトを表示しないことです。

<?php
    require_once "../assets/repository/mysql.php";

    $query = "SELECT * FROM datashep_AMS.COMPLETE_APPLICATIONS";
    $results = mysql_query($query);

    $first = true;

    $out = fopen('export.csv', 'w');

    while($row = mysql_fetch_assoc($results)){
        if($first){
            $titles = array();
            foreach($row as $key=>$val){
                $titles[] = $key;
            }
            fputcsv($out, $titles);
            $first = false;
        }
        fputcsv($out, $row);
    }

    fclose($out);
?>

私の質問は、ファイルが生成されたらすぐにユーザーにダウンロードさせるにはどうすればよいですか?

また、ダウンロード (または拒否) した後、サーバーから .CSV ファイルを削除するにはどうすればよいですか?

4

1 に答える 1

14

サーバーに何も保存する必要はありません(したがって、削除する必要はありません...)。結果をブラウザーに書き戻し、それに応じてヘッダーを設定するだけです。

<?php
require_once "../assets/repository/mysql.php";

$query = "SELECT * FROM datashep_AMS.COMPLETE_APPLICATIONS";
$results = mysql_query($query);

$first = true;

header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="export.csv"');
header('Cache-Control: max-age=0');

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

while($row = mysql_fetch_assoc($results)){
    if($first){
        $titles = array();
        foreach($row as $key=>$val){
            $titles[] = $key;
        }
        fputcsv($out, $titles);
        $first = false;
    }
    fputcsv($out, $row);
}

fclose($out);
?>
于 2013-06-29T22:15:47.527 に答える