为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
不负相思意 2023-06-24 17:44:55
我想知道是否有人可以给我一些关于如何创建下载弹出窗口以及用户保存它的位置的指示。因此,当他们单击我的“下载为 CSV”按钮时,它会提示用户在其目录中选择目标位置。目前,我可以让下载的文件正常工作,但前提是我从命令行运行它。我不太确定如何用它来实现标题。主要问题是因为我无法使用 fopen()、fwrite() 和 fclose(),因为我只向 csv 文件添加一个(虽然很大)字符串。以下是一些仅在我本地运行该程序时才有效的代码。  $output = print_r(cleanUpEntry($info), true);     file_put_contents("output.csv", $output);它将文件下载到与我的 PHP 文件相同的文件夹,但我需要它在网页上工作,以便用户可以下载该文件。注意* 我不能使用 fputcsv,因为它只适用于数组,而我的是一个多维数组,所以获取 print_r 的输出要容易得多。
查看完整描述

2 回答

?
Smart猫小萌

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;


查看完整回答
反对 回复 2023-06-24
?
慕斯709654

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;

    }


查看完整回答
反对 回复 2023-06-24
  • 2 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信