我有一个值数组,我想将其放入csv文件然后下载它:
$f = fopen("./tokens.csv", "w");
foreach ($tokens as $line) {
fputcsv($f, array("1"=>$line));
}
fseek($f, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="tokens.csv"');
fpassthru($f);
结果是服务器上的文件填充了令牌数组的内容,但下载的文件是一个空的csv文件。
答案 0 :(得分:3)
您已在“只写”模式下打开文件。您没有告诉PHP您想要阅读它。您需要以“读写”模式打开文件。
$f = fopen("./tokens.csv", "w+");
DOCS:http://www.php.net/manual/en/function.fopen.php
P.S。它是text/csv
而不是application/csv
。你拼错了attachment
。
注意:"w+"
每次都会覆盖该文件。是否要将文件存储在服务器上,或者这只是一个下载脚本?如果你不存储文件而你只是用它来下载文件,你可以直接写入输出流:
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="tokens.csv"');
$f = fopen("php://output", "w");
foreach ($tokens as $line) {
fputcsv($f, array("1"=>$line));
}
答案 1 :(得分:1)
这将有效:
$f = fopen("./tokens.csv", "w+");
foreach ($tokens as $line) {
fputcsv($f, array("1"=>$line));
}
fseek($f, 0);
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="tokens.csv"');
fpassthru($f);
Attachment
而非attachement
CSV文件的正确Mime类型是:
header('Content-Type: text/csv');