在PHP中取消设置上传的文件

时间:2010-09-08 20:10:31

标签: php forms web-applications csv

我有一个表单用于接收上传的.csv文件,解析它并将数据插入Apache服务器上的MySQL数据库。页面首先检查是否有上传的文件。如果有,则处理数据,否则显示表格(如下)。

<form enctype="multipart/form-data" action="uploadfaculty.php" method="POST" id="UploadForm">
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>

我的问题是,目前用户可以简单地反复浏览浏览器,因为该文件仍在服务器上,并且在$ _FILES数组中,每次都会处理它。

我试过了:
unlink($_FILES['uploadedfile']['tmp_name'])unlink($_FILES['uploadedfile'])unset($_FILES['uploadedfile']['tmp_name'])

unset($_FILES['uploadedfile'])`

我甚至通过Javascript重置表单(我知道这不起作用,但它只是为了消除所有疑问)。一切都无济于事。我确信这很简单,我很想念......它几乎总是如此。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

这并非令人失望,因为后期操作存储在浏览器的末尾并且在他们点击F5时被重新上传(在很短的时间内,因为它只是一个csv)。这与他们使用表单上传另一个csv基本相同。

你可以这样做:

if (isset($_POST['csv'])){
 $DataProcessed = DataProcessingFunction();
}

if (isset($DataProcessed) && $DataProcessed){
  header("Location: /path/to/form/page.php");
  exit();
}

这将清除先前请求中发送的帖子数据。刷新不会重新提交表单。

答案 1 :(得分:3)

您可以在处理后header将它们重定向到该上传页面,以防止帖子数据通过刷新持续进入。但是一旦处理完成,就应该清除临时文件。除非您使用move_uploaded_file函数,否则PHP不会保留该文件。