php - readfile 下载空文件和错误的文件类型

标签 php jquery csv

我正在使用下面的代码通过单击按钮下载 csv 文件。

JS:

$(document).on("click", "#CSV", function () {

    var csv_value = $('#result').table2CSV({
        delivery: 'value'
    });
    console.log(csv_value);
    $.ajax({
        type: "POST",
        url: "csv.php",
        data: {
            csv: csv_value
        },
        success: function (html) {
             window.location.href = "download.php";
        }
    });

});

csv.php:

require_once ("session_start.php");
if (isset ( $_POST ['csv'] )) {
$file = $_POST['csv'];
$_SESSION ['csvf'] = $file; 
} else {
    echo "No CSV Data";
}

download.php:

session_start();
    $file =$_SESSION['csvf'];
    $filename = $file."_".date("Y-m-d_H-i",time());
    header ( "Content-type: application/vnd.ms-excel" );
    header ( "Content-disposition: filename=" . $filename . ".csv" );
    readfile($filename);
    exit ();

当我执行函数时,下载的文件是 download.php,尽管传递了正确的 header (通过控制台确认),文件也是空的。此外,当我使用 print() 时,它会打印 CSV 数据,因此我知道该文件不为空,但它还会生成一个 .php 文件并打印其中的所有内容,包括标题。我该如何解决这个问题?

编辑

我尝试使用 .htaccess 中的以下代码强制下载,但无济于事。

<FilesMatch "\.(?i:csv)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

结果还是一个download.php文件。

最佳答案

尝试

Content-Disposition: attachment; filename="<your file name>".

并且您有 2 个 Content-disposition header (第一个将被覆盖)。

关于php - readfile 下载空文件和错误的文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29768586/

相关文章:

javascript - Wordpress 的 AJAX 页面加载

php - 如何在 Laravel 5 中获取当前使用的 Artisan 控制台命令名称?

javascript - 如何在jQuery中实现 "OR"逻辑而不是 "AND"?

jquery - 为使用 PhoneGap 构建的 iPhone 应用程序加速 jQuery Mobile 1.1 中的页面转换?

C++ - 将结果输出到 xlsx(电子表格)而不是 CSV

php - PHP 中的查询不起作用

php - 在 Symfony 3 Controller 中获取请求和 session

javascript - 将元素添加到 dom 并使用 jquery 应用类不应用 css3 转换

ruby-on-rails - 错误率: FasterCSV to hash

javascript - knockout 变更事件函数