2016-11-04 5 views
0

コードセットを生成し、MySQL DBに保存してダウンロード可能なcsvファイルとして出力します。 PHP配列をcsvに変換するコードブロックの後にecho文もあります。ブラウザに出力する代わりにconvert_to_csv関数呼び出しの後のecho文は、代わりにファイルに出力し、最初の行を上書きします。 echo文を代わりにブラウザに出力するにはどうすればよいですか?コードブロックは次のとおりです。ヘッダを使用してcsvに出力する際に​​画面にエコーする

convert_to_csv($newCodesArray,$fileName,','); 
echo "Your file was successfully generated"; 

function convert_to_csv($input_array, $fileName, $delimiter) 
{ 

    header('Content-Type: text/csv'); 
    header("Content-Disposition: attachment; filename=\"$fileName\""); 
    $f = fopen('php://output', 'w'); 
    /* loop through array */ 
    foreach ($input_array as $line) { 
     /* default php csv handler */ 
     fputcsv($f, $line, $delimiter); 
    } 
    fclose($f) or die("Can't close php://output"); 

} 
+0

ファイルのダウンロードを強制したり、同じ応答で画面にテキストを送信することはできません。ファイルを(CSVヘッダーで)返すか、テキストを画面に戻します。 1つの応答= 1つのタイプ。ファイルが正しく生成されたことを伝える必要がありますか?彼らはおそらく、ファイルがダウンロードされてから気付くでしょう。 –

+0

"あなたのファイルは正常に生成されました"は単なる例でした。私は他のテキストも印刷/エコーしたかったのです。関数が呼び出される前に「あなたのファイルが生成されています。しばらくお待ちください」などのテキスト。出力に50万行近くがあり、ユーザーはしばらく待ってからフィードバックが役立ちます。 – FBP

+0

@MagnusErikssonヘッダーが設定される前にエコーを実行しないでください。 – FBP

答えて

0

すでにヘッダーをtext/csvとして定義しています。だから、それはtext/htmlが必要なので、ブラウザでは印刷されません。

また、次のようにすることもできます。関数を別のファイル(例:csv.php)にコピーします。

<?php 
echo "Your file was successfully generated <script> window.location = 'csv.php' </script>"; 

これで、エコー文字列が印刷され、csvファイルがダウンロードされます。

コメントマグナス・エリクソンとして、上記のコード

は、その本当に生成に成功していないかをチェックしません。 AJAXでコードを拡張することができます。

<script> 
    $.ajax('csv.php', { 
     success: function(data) { 
     document.write('Your file was successfully generated.'); 
     windows.location = 'csv.php'; 
     }, 
     error: function() { 
     document.write('Your file generation failed.'); 
     } 
    }); 
    </script> 

注: - AJAX呼び出しがファイルを2回生成します。

+0

この問題は、ファイルの生成に失敗した場合でも_ "... successfully generated"というテキストが常に表示されるため、直感的ではありません。 –

+0

はい。同意する。成功したファイルに対して条件を作りたいなら、リダイレクトするのではなく、AJAXでもっと書く必要があるかもしれません。私たちはリターンコード200またはエラーで条件を作ることができます。 – Bala

+0

...あなたのajaxの例では、ファイル生成を2回実行します。一度動作するかどうか確認してから、ユーザーをリダイレクトするときはもう一度確認してください。それは悪いアプローチのようです。 –

関連する問題