【问题标题】:Unset uploaded files in PHP在 PHP 中取消设置上传的文件
【发布时间】:2010-09-08 20:10:31
【问题描述】:

我有一个表单,用于接收上传的 .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>

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

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

unset($_FILES['uploadedfile'])`

我什至通过 Javascript 重置了表单(我知道这不起作用,但这样做只是为了消除所有疑问)。一切都无济于事。我敢肯定这是我想念的一些简单的东西……几乎总是如此。有什么想法吗?

【问题讨论】:

    标签: php forms web-applications csv


    【解决方案1】:

    这不会取消设置,因为发布操作存储在浏览器端,并在按 F5 时重新上传(在很短的时间内,因为它只是一个 csv)。这与他们使用表单上传另一个 csv 基本相同。

    你可以这样做:

    if (isset($_POST['csv'])){
     $DataProcessed = DataProcessingFunction();
    }
    
    if (isset($DataProcessed) && $DataProcessed){
      header("Location: /path/to/form/page.php");
      exit();
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • “处理完成后应清除临时文件”到底是什么意思?你的意思是说一旦我的脚本运行它并且我 fclose($handle) 它应该消失了吗?如果是这样,那么如果我可以刷新浏览器并且可以重新找到、解析和插入数据,那么肯定会发生其他问题。这是一个测试页面:studentorg.ecpi.edu/oswm/uploadcsv.php
      • header("location:thankyou.php") 是一个不错的选择,但我宁愿不必这样做,因为还有另一种方法。
      • $_FILES 数组未填充用户使用先前请求上传的文件。如果他们按 F5 并刷新,则每次都在上传文件。您需要将它们发送到不同的页面以防止重新提交请求。不过,这并不能阻止他们使用 back。
      • 我的意思是服务器上应该只存在该文件的一个副本。当 PHP 完成处理后,该临时文件将被清除并删除。这只是意味着它不会占用您的磁盘空间。但是,如果他们确实一直按刷新,它将耗尽您的带宽。因此,重定向到感谢页面或仅重定向到同一上传页面本身应该清除 POST 数据。
      • 好的,感谢您对临时文件存储的说明,我想这就是您的意思。不过,我想留在同一页面上
      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 2021-10-04
      • 2018-03-17
      • 2011-07-02
      • 1970-01-01
      • 2016-04-19
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多