返回文件,供单击PHP

时间:2018-12-19 19:16:04

标签: php html

我正在尝试建立一个网站,人们可以填写/上传表格中的必要信息。服务器根据这些信息进行一些计算,生成一个输出文件并返回该文件。除了返回的最后一步,一切都进行得很好。以下是我的网站的简化版本,您可以直接对其进行测试。在此示例中,它应返回一个文件,其中包含用户停留在同一页面上时上传的文件名。但是,它实际上返回页面的html代码和文件名。我应该怎么做才能只获得输出文件而不是html代码?非常感谢!

我尝试了烧瓶,一切都进行得很好。现在,由于某种原因,我想将所有内容翻译为php。我真的是网站建设的新手,并且缺乏很多背景知识。

<!DOCTYPE html>
<html>
  <body>
    <form action="" method="POST" autocomplete="on" 
          enctype="multipart/form-data">
    <div> Upload your file: <input type="file" name="file"/> </div>
    <input style="margin-left: 0.5em;" type="submit" id="click" 
           value="Click Me!" name='submit_btn'/>
    </form>

    <?php
       if(isset($_POST['submit_btn']))
       {
          $fp = fopen("./output.txt", "w");
          fwrite($fp, $_FILES['file']['name']."\n");
          fclose($fp);

          header("Content-Type:text/plain");
          header("Content-Type: application/download");
          header('Content-Disposition: attachment; 
                 filename="output.txt"');
          readfile("output.txt");
       }
    ?>
</html>

1 个答案:

答案 0 :(得分:0)

您正在尝试同时返回HTML 文件。每个HTTP请求只能导致一个或另一个。分开关注。从一个PHP资源开始,该资源 only 返回您发布到该文件的文件:

<?php
   if(isset($_POST['submit_btn']))
   {
      $fp = fopen("./output.txt", "w");
      fwrite($fp, $_FILES['file']['name']."\n");
      fclose($fp);

      header("Content-Type:text/plain");
      header("Content-Type: application/download");
      header('Content-Disposition: attachment; 
             filename="output.txt"');
      readfile("output.txt");
   }
?>

然后编写一个HTML页面,将其发布到该PHP资源:

<!DOCTYPE html>
<html>
    <body>
        <form action="yourPHPFileAbove.php" method="POST" autocomplete="on" 
              enctype="multipart/form-data">
            <div> Upload your file: <input type="file" name="file"/> </div>
            <input style="margin-left: 0.5em;" type="submit" id="click" 
                   value="Click Me!" name='submit_btn'/>
        </form>
    </body>
</html>

请特别注意action中的<form>属性如何发布到特定的PHP资源,而不仅仅是发布回自身。