我正在尝试建立一个网站,人们可以填写/上传表格中的必要信息。服务器根据这些信息进行一些计算,生成一个输出文件并返回该文件。除了返回的最后一步,一切都进行得很好。以下是我的网站的简化版本,您可以直接对其进行测试。在此示例中,它应返回一个文件,其中包含用户停留在同一页面上时上传的文件名。但是,它实际上返回页面的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>
答案 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资源,而不仅仅是发布回自身。