使用PHP从MySQLi生成CSV文件正在保存但不要求下载

时间:2015-05-10 10:37:09

标签: php mysql csv mysqli

所以我的下面的代码基于指定的表生成了一个CSV并生成文件并保存到downloads / filename.csv但是一旦生成它就不要求用户下载。有什么想法吗?

以下是代码:

PHP

    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;

1 个答案:

答案 0 :(得分:0)

这应该允许您选择要写入CSV文件的字段及其顺序。

'early-bird'.titleize