无法使用php

时间:2018-05-04 10:37:55

标签: php csv export-to-csv

我想用php下载csv文件。这就是我做的事情

    $filename = $reportof . '.csv';

    header('Content-type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '";');
    $f = fopen('php://output', 'w');
    $delimiter = ";";

    fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
    foreach ($Reports as $line) {
        fputcsv($f, $line, $delimiter);
    }

此处$ Reports包含我想要的所有CSV文件数据。 当我检查console-> network时,我收到这些数据作为回应。 但文件没有下载。 任何人都可以建议我哪里出错了吗?

2 个答案:

答案 0 :(得分:0)

请务必在完成写入后关闭文件指针。

$filename = $reportof . '.csv';

header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

$f = fopen('php://output', 'w');
ob_clean();

$delimiter = ';';

fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($Reports as $line) {
    fputcsv($f, $line, $delimiter);
}

ob_flush();
fclose($f);
die();

编辑:

添加了ob_clean()ob_flush()方法,这只是为了确保清除缓冲区中的任何输出,如果之前没有写入任何内容,则可以跳过此

编辑2:

添加了一些虚拟数据进行测试,这是有效的。

header('Content-Description: File Transfer');
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="test.csv";');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

$f = fopen('php://output', 'w');

$delimiter = ';';

$rs = [
    [1, 'some name1', 'open', date('c'), 1],
    [2, 'some name2', 'closed', date('c'), 2],
    [3, 'some name3', 'open', date('c'), 3],
    [4, 'some name4', 'closed', date('c'), 4],
    [5, 'some name5', 'open', date('c'), 5],
];

fputcsv($f, array('ID', 'Name', 'Status', 'Date', 'Rank'));
foreach ($rs as $line) {
    fputcsv($f, $line, $delimiter);
}

fclose($f);
die();

自动下载csv:

test.csv

答案 1 :(得分:0)

尝试使用window.open打开包含网址的新浏览器窗口。浏览器可能不会通过AJAX请求让客户端打开屏幕。 另一个原因可能是您的浏览器试图在查看器中显示该文件,但它无法执行此操作。尝试其他浏览器?

然而,这仍然在猜测,因为您在检查器的网络选项卡中看到了内容,而没有告诉我们您如何调用脚本......