如何使用 file_put_contents php 创建 csv 文件的下载弹出窗口(标题)

我想知道是否有人可以给我一些关于如何创建下载弹出窗口以及用户保存它的位置的指示。

因此,当他们单击我的“下载为 CSV”按钮时,它会提示用户在其目录中选择目标位置。

目前,我可以让下载的文件正常工作,但前提是我从命令行运行它。我不太确定如何用它来实现标题。

主要问题是因为我无法使用 fopen()、fwrite() 和 fclose(),因为我只向 csv 文件添加一个(虽然很大)字符串。

以下是一些仅在我本地运行该程序时才有效的代码。

  $output = print_r(cleanUpEntry($info), true);
    file_put_contents("output.csv", $output);

它将文件下载到与我的 PHP 文件相同的文件夹,但我需要它在网页上工作,以便用户可以下载该文件。

注意* 我不能使用 fputcsv,因为它只适用于数组,而我的是一个多维数组,所以获取 print_r 的输出要容易得多。


不负相思意
浏览 114回答 2
2回答

Smart猫小萌

将 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;

慕斯709654

这使用老派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;    }
打开App,查看更多内容
随时随地看视频慕课网APP