Php 如何为包含文件内容的csv文件创建下载弹出窗口(标题)

Php 如何为包含文件内容的csv文件创建下载弹出窗口(标题),php,csv,Php,Csv,我想知道是否有人能给我一些关于如何创建下载弹出窗口以及用户保存位置的建议 因此,当他们点击我的“下载为CSV”按钮时,它会提示用户在他们的目录中选择一个目的地 目前,我可以让下载的文件正常工作,但只有在我从命令行运行它的情况下。我不太确定如何用这个实现头文件 主要问题是,我无法使用fopen()、fwrite()和fclose(),因为我只向csv文件添加了一个字符串(尽管很大) 这里的一些代码只有在本地运行程序时才有效 $output = print_r(cleanUpEntry($inf

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

因此,当他们点击我的“下载为CSV”按钮时,它会提示用户在他们的目录中选择一个目的地

目前,我可以让下载的文件正常工作,但只有在我从命令行运行它的情况下。我不太确定如何用这个实现头文件

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

这里的一些代码只有在本地运行程序时才有效

  $output = print_r(cleanUpEntry($info), true);
  file_put_contents("output.csv", $output);
它将文件下载到与我的PHP文件完全相同的文件夹中,但我需要它处理网页,以便用户可以下载文件


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

将CSV文件发送到浏览器

$output=。。。
标题(“内容类型:文本/csv”);
echo$输出;
出口
浏览器倾向于打开CSV、PDF等文件。若要保存文件而不是打开文件,请添加HTTP头
内容处置
。对于大于几个字节的文件,也可以使用
内容长度

强制浏览器下载文件。

$output=。。。
$filename=“output.csv”;
标题(“内容类型:文本/csv”);
标题('Content-Disposition:attachment;filename=“.”.$filename.'”);
标题(“内容长度:.strlen($output));
echo$输出;
出口
将静态文件发送到浏览器

您的web服务器(Apache、Nginx等)应该处理静态文件,但如果出于安全或其他原因需要通过PHP运行它

$file='./files/myfile.csv';
标题(“内容类型:文本/csv”);
readfile($file);
出口
强制浏览器下载静态文件。

$file='./files/myfile.csv';
$filename=basename($file);//或者直接指定,如“output.csv”
标题(“内容类型:文本/csv”);
标题('Content-Disposition:attachment;filename=“.”.$filename.'”);
标题(“内容长度:”.filesize($file));
readfile($file);
出口

这使用了老式的
fopen
fputcsv
fclose
,而不是
文件内容,但始终适用于我

    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;
    }
出于某种原因,您需要使用
文件内容吗

如果文件已经存在/不需要从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;
    }

出于某种原因,您的“强制浏览器下载文件”代码给了我以下错误:“解析错误:语法错误,第63行出现意外的“;”,应为“,”或“)”(这是标题(内容长度:“.strlen($output);”)啊,我缺少一个括号输入错误。我编辑了答案,请立即尝试:)工作起来很有魅力!非常感谢:)我做了,但还没有足够的声誉来展示它。它会在我达到15岁时出现,就像底部的说明所说,我不能使用fputcsv,因为它只适用于数组。换句话说,foreach($data as$line)不行。我有一个多维数组,如果我把它展平成一维数组,它的格式就不好,这就是为什么我只得到print\u r的输出,然后用file\u put\u内容保存它。不管怎样,delta zero放在下面的代码都很好!明白了,这就是为什么我在你有任何文件后,还添加了第二位(打印保存到文件)您可以使用该功能下载它。(与delta zero的选项相同)-无论哪种方式,很高兴您得到了需要的工作!