使用PHP创建和下载文件

时间:2012-10-15 08:56:59

标签: php jquery forms download submit

我正在尝试重写并下载.txt文件,当用户提交以下表单时,但在最后的障碍中遇到问题。

<form id="saveFile" action="index.php?download" method="POST" onsubmit="return false;">
    <input type="submit" name="backupFile" id="backupFile" value="Save a file" />
    <input type="hidden" name="textFile" id="textFile" />
</form>

当按下提交按钮时,我正在运行一个包含以下(简化)代码的jQuery函数 - 我已经取出了我实际保存的代码并用简单的字符串替换它。这将设置“隐藏”输入类型,然后提交表单。

$("#textFile").val('This is the text I will be saving');
document.forms['saveJSON'].submit();

提交表单后,将运行以下PHP代码:

<?php 
if (isset($_GET['download'])) {

    $textData = $_POST["textFile"];
    $newTextData = str_replace("\\","",$textData);
    $myFile = "php/data.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    fwrite($fh, $newTextData);
    fclose($fh);

    header("Cache-Control: public");
    header("Content-Description: File Download");
    header("Content-Disposition: attachment; filename='".basename($myFile)."'");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    readfile($myFile);
}
?>

直到fclose($ fh);行代码实际上工作正常;已更新.txt文件,其中包含所需的新内容和文件下载。但是,当我打开下载的文件时,它包含.txt文件文本以及网页上的大量内容(index.php)。

例如,文件可能如下所示

“这是我要保存的文字

这是我网站的h1

其次是我的内容“

有谁知道可能导致这种情况的原因?

1 个答案:

答案 0 :(得分:2)

首先,正如Harke所说,你重定向(或链接)到只负责提供下载的脚本,你可以轻松地解决这个问题

在读取文件之前清理输出缓冲区并在readfile

之后退出脚本
ob_clean();
    flush();
    readfile($file);
    exit;