

PHPで、ユーザの実行指示によりDB上のレコードをCSVファイルにダウンロードすることを可能にしました。  
以下コーディングです。

[code]

    if (touch($file_path)){
        $file = new SplFileObject($file_path, "w");
        // write csv header
        $file->fputcsv($export_header);
    
        while($row_export = $stmt->fetch(PDO::FETCH_ASSOC)){
            $export_arr = "";
    
            foreach( $row_export as $key => $val ){
                $export_arr[] = mb_convert_encoding($val, 'SJIS-win', 'UTF-8');
            }
    
            $file->fputcsv($export_arr);
        }
    
        $dbh = null;
    
        // ダウンロード開始
        header('Content-Type: application/octet-stream');
        // ここで渡されるファイルがダウンロード時のファイル名になる
        header('Content-Disposition: attachment; filename=temporary.csv'); 
        header('Content-Transfer-Encoding: binary');
        header('Content-Length: ' . filesize($file_path));
        readfile($file_path);
        exit;
    }
    
[/code]

====質問====  
クライアント画面下部に現れるファイルを開く・保存のダイアログ（IE）が、ダウンロードされるファイルが仕上がる前に表示されている気配があります。これを操作した際に内容が出力されきっていない状態の結果が画面に表示されるためです。  
全てのが出力結果が出揃ってからクライアント側の入手・展開を可能にする動作を達成するには どういった対策が考えられますか？

====追記====  
最終的に以下のようにしたら、ダウンロードのCSVファイルの内容が保障されるようになりました（多分）。  
IEのブラウザでしか確認していませんが．．．

[code]

    // ダウンロード開始
    header('Content-Type: application/octet-stream');
    // ここで渡されるファイルがダウンロード時のファイル名になる
    header('Content-Disposition: attachment; filename=temporary.csv'); 
    header('Content-Transfer-Encoding: binary');
    //header('Content-Length: ' . filesize($file_path));        【いらない？！】//
    readfile($file_path);
    
[/code]


CC BY-SA 3.0
2018-02-02T05:46:42.037
41400
2018-02-03T04:20:38.037
2018-02-03T04:20:38.037
25696
25696
question
php
CSVファイルが仕上がる前に、クライアントが取得操作（ブラウザ）されてしまう事態を避けたい