创建和使用PHP下载一个文本文件(Create and download a text file u

2019-06-25 12:23发布

这里就是我想要做的事。 我有一系列的报告说,他们也希望能够下载为逗号分隔的文本文件。 我读了一堆那里的人说,简单地echo出来的结果,而不是创建一个文件的网页,但是当我尝试,它只是输出到它们的页面。

我有这个在每个报告的形式

Export File<input type="checkbox" name="export" value="1" />

所以,在文章中,我可以检查,如果他们试图导出文件。 如果他们是我试图做到这一点:

if($_POST['export'] == '1')
{
    $filename = date("Instructors by DOB - ".$month) . '.txt';

    $content = "";

    # Titlte of the CSV
    $content = "Name,Address,City,State,Zip,DOB\n";

    for($i=0;$i<count($instructors);$i++)
        $content .= ""; //fill content

    fwrite($filename, $content);

    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Length: ". filesize("$filename").";");
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Type: application/octet-stream; "); 
    header("Content-Transfer-Encoding: binary");

    readfile($filename);
}

基本上,页面刷新,但没有文件推下载。 任何人都可以指出我错过了什么?

编辑我想我是不完全清楚。 这不是只创建和下载文件的网页上,这是也显示报表中的页面上。 所以,当我把一个出口(); 之后ReadFile的页面加载空白的其余部分。 我需要显示此页面上的报告,以及。 我想这可能也有做为什么它不下载,因为这个页面已经发送的报头信息。

Answer 1:

我忽略了问你尝试关闭文件之前,你写出来的内容的方式。

这里检查FWRITE手册: http://php.net/manual/en/function.fwrite.php

你需要做的是:

$filename = "yourfile.txt";
#...
$f = fopen($filename, 'w');
fwrite($f, $content);
fclose($f);

和关闭文件后,你现在可以安全地跨越发送下载。

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; "); 
header("Content-Transfer-Encoding: binary");

readfile($filename);

有几件事情:

  • 你真的不需要设置内容类型为application/octet-stream 。 为什么不设置一个更真实类型为text/plain
  • 我真的不知道要如何使用最新的功能。 请参阅手册在这里: http://php.net/manual/en/function.date.php
  • 由于正确地指出的@nickb,必须做后退出脚本readfile(..)


文章来源: Create and download a text file using php