我有这个功能可以生成CSV并存储在服务器上(这样可以正常工作)但是它没有推送到浏览器供用户下载,有人能看出原因吗?
它还将数据放入多个部分,如;
我希望如果将所有数据放在1行而不是3个部分,但不知道如何执行此操作。
功能:
// download invoice csv sheet
if ($action == 'download_csv'){
header("Content-type: text/csv");
// Connect to the database
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USER, DATABASE_PASS, DATABASE_NAME);
// output any connection error
if ($mysqli->connect_error) {
die('Error : ('.$mysqli->connect_errno .') '. $mysqli->connect_error);
}
$tables = array('invoices', 'customers', 'invoice_items'); // array of tables need to export
$file_name = 'invoice-export-'.date('d-m-Y').'.csv'; // file name
$file_path = 'downloads/'.$file_name; // file path
$file = fopen($file_path, "w"); // open a file in write mode
chmod($file_path, 0777); // set the file permission
// loop for tables
foreach($tables as $table) {
$table_column = array();
$query_table_columns = "SHOW COLUMNS FROM $table";
// fetch table field names
if ($result_column = mysqli_query($mysqli, $query_table_columns)) {
while ($column = $result_column->fetch_row()) {
$table_column[] = $column[0];
}
}
// Format array as CSV and write to file pointer
fputcsv($file, $table_column, ",", '"');
$query_table_columns_data = "SELECT * FROM $table";
if ($result_column_data = mysqli_query($mysqli, $query_table_columns_data)) {
// fetch table fields data
while ($column_data = $result_column_data->fetch_row()) {
$table_column_data = array();
foreach($column_data as $data) {
$table_column_data[] = $data;
}
// Format array as CSV and write to file pointer
fputcsv($file, $table_column_data, ",", '"');
}
}
}
// close file pointer
fclose($file);
// ask either save or open
header("Pragma: public");
header("Expires: 0");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='{$file_name}';" );
header("Content-Transfer-Encoding: binary");
// open a saved file to read data
$fhandle = fopen($file_path, 'r');
fpassthru($fhandle);
fclose($fhandle);
$mysqli->close();
die;
}
JS
function downloadCSV(action) {
jQuery.ajax({
url: 'response.php',
type: 'POST',
data: action,
dataType: 'json',
success: function(data){
$("#response .message").html("<strong>Success</strong>: CSV has been successfully generated and also been stored in the downloads/ directory.");
$("#response").removeClass("alert-warning").addClass("alert-success").fadeIn();
$("html, body").animate({ scrollTop: $('#response').offset().top }, 1000);
},
error: function(data){
$("#response .message").html("<strong>Error</strong>: Oppps there has been a problem, please try again.");
$("#response").removeClass("alert-success").addClass("alert-warning").fadeIn();
$("html, body").animate({ scrollTop: $('#response').offset().top }, 1000);
}
});
}