2 回答
TA贡献1911条经验 获得超7个赞
将 CSV 文件发送到浏览器
$output = ...
header('Content-Type: text/csv');
echo $output;
exit;
浏览器倾向于打开 CSV、PDF 等文件。要保存文件而不是打开文件,请添加 HTTP header Content-Disposition。对于较大几个字节的文件,Content-Length也可以使用。
强制浏览器下载文件。
$output = ...
$filename = "output.csv";
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: " . strlen($output));
echo $output;
exit;
发送静态文件到浏览器
您的 Web 服务器(Apache、Nginx 等)应该处理静态文件,但如果您出于安全或其他原因需要通过 PHP 运行它......
$file = './files/myfile.csv';
header('Content-Type: text/csv');
readfile($file);
exit;
强制浏览器下载静态文件。
$file = './files/myfile.csv';
$filename = basename($file); // or specify directly, like 'output.csv'
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: " . filesize($file));
readfile($file);
exit;
TA贡献1840条经验 获得超5个赞
这使用老派fopen, fputcsv, 和fclose, 而不是file_put_contents,但总是对我有用......
function csv_from_array($fileName, $data, $header_included = FALSE){
// Downloads file - no return
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen( 'php://output', 'w' );
foreach($data as $line) {
// Add a header row if not included
if (!$header_included) {
// Use the keys as titles
fputcsv($fh, array_keys($line));
}
fputcsv($fh, $line);
}
fclose($fh);
exit;
}
您是否因某种原因需要使用?file_put_contents
如果文件已经存在/不需要从 php 数组创建,您可以修改如下:
function download_csv($fileName){
// Downloads file - no return
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
exit;
}
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报