触发动态生成的文本文件以供下载

时间:2014-08-23 22:36:26

标签: php file download

我目前正在尝试实现一个PHP页面,该页面将在用户单击按钮时生成代码。代码将动态生成,然后PHP页面将触发下载文件,提示用户将文本文件保存在他们的机器上。

在阅读了大量帖子后,我使用的这段代码简洁明了,完全符合我的要求:

{
$result = "Your code is: " . $_POST['req_code'];
header('Content-disposition: attachment; filename=code.lic');
header('Content-type: text/plain');
echo $result . "\n";
}

但是,下载的文件不仅包含代码,还包含当前页面中的所有HTML。以下只是文件中包含的内容的一小部分:

<!DOCTYPE html>
<html lang="en-CA">
<head>
<meta charset="UTF-8" />
<title>My Account | ...

我尝试过使用&#34; exit();&#34;函数终止流但它仍然输出所有HTML。

有谁知道我在这里做错了什么?该文件应仅包含$ result的内容。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

虽然这是一个旧线程,但搜索结果仍然指向此处。因此,通过给出一个有效的简单独立示例来回答原始问题(某种程度),这里是: 创建两个文件,&#39; index.php&#39;和&#39; redirect.php&#39;

的index.php:

<?php
$head = <<<EOHEAD
<head>
    <title>Download document test</title>
    <meta http-equiv="Content-Type" content="txt/html; charset=utf-8" />
</head>
EOHEAD;
$body = <<<EOBODY
<body>
    <form action="redirect.php" method="post" id="mainform">
        <input type="submit" name="download" value="Download"/>
        <input type="submit" name="cancel" value="Cancel"/>
    </form>
</body>
EOBODY;
echo $head.$body;
?>

redirect.php:

<?php
    if (isset($_POST['download'])) {
        header('Content-disposition: attachment; filename=test.txt');
        header('Content-type: text/plain');
        echo "Hello World\n";
    }
    else {
        header("location:index.php");
    }
?>

答案 1 :(得分:0)

您需要a)创建一个新页面来下载文件(不包含任何 HTML)或b)从当前页面删除所有 HTML。此外,在致电header()之前,您不应发送任何内容:

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP

发送

参考:http://php.net/manual/en/function.header.php

答案 2 :(得分:0)

您不必从下载站点删除所有HTML代码,但在下载文件之前,不能有任何HTML代码。将您的代码广告放在页面顶部,它应该没问题