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 關注
- 143 瀏覽
添加回答
舉報