用户离开页面时如何删除文件?

时间:2009-11-18 15:53:03

标签: php javascript html

我有一个表单,动作设置为php文件(verify.php)。 在表单中,我制作了一个非常漂亮的图片上传部分。 提交表单后,将打开verify.php以验证用户填写的表单。

表单值全部放在verify.php页面上的另一个表单中。 只有图像上传到服务器上的文件夹,这是我的问题。 如果用户感到遗憾(未验证)投放广告,或者用户又返回更改广告,我希望删除该图片。

我该怎么做?

一种方法是在页面'unLoads'(用户点击后退按钮)时删除文件名。但是,如果用户关闭了verify.php页面上的浏览器,那就不会解决问题了,因为那不算“卸载”吗?

解决方案?

如果您需要更多输入,请告诉我,我将更新此帖子!

由于

11 个答案:

答案 0 :(得分:7)

不幸的是,这是一个非常棘手的事情,更简单的解决方案是检查哪些文件是旧的,并在下次有人访问页面时删除它们。这可以通过PHP完全完成,并且非常可靠。

答案 1 :(得分:2)

也许我误解了,但过程可能就是这样:

1个用户上传文件(正常进入* nix / tmp文件夹)

2您将文件移动到第二个临时文件夹/ upload_unconfirmed

3当用户ACTUALLY确认操作时,您就可以了 a)将其移动到您的文件夹以永久保存它,例如/clientfolder/theirusername.jpg b)然后删除/ upload_unconfirmed

中的usersuser.jpg

在后台运行一个cron到rm每个文件早于1小时/ upload_unconfirmed / *

如果每个客户端只有一个图像,则后续上传将覆盖其旧文件。

答案 2 :(得分:1)

检测浏览器关闭等“放弃”基本上是不可能的。没有可靠的方法可以在服务器端实时跟踪它。删除这些图像的最简单方法是设置一个正在运行的进程,删除与废弃单元相关联的图像。

答案 3 :(得分:1)

通常,服务器端脚本不知道用户离开页面或关闭浏览器,它只能检查会话超时,但通常30分钟或更长时间取决于设置。

所以,如果你真的想实时做,请在页面中放置ajax计时器,并每隔30秒发送一次 hello 请求或类似的东西到服务器,然后你可以删除图像文件如果没有响应超过1分钟或类似的东西。

但是如果你有很多用户,那么每30秒或更短时间向服务器发送ajax请求会影响服务器性能。

答案 4 :(得分:1)

在用户明确验证之前,请勿将文件移动到其永久位置。 PHP将上传的文件放入特定的位置,通常是/ tmp目录(在* nix安装上),当需要空间时,它会以fifo顺序自动清除。因此,如果您不将文件移出此特殊目录,那么它将在未经指定的时间进行自动清理而无需进一步干预。

答案 5 :(得分:1)

我会按照纪元时间命名图像(使用time()函数),如1258560055.jpg然后构建一个cron作业,然后删除每小时,两小时或之后的所有图像。

答案 6 :(得分:1)

您就是这样做的:

<强> jQuery的:

$(window).bind('beforeunload',function(){
    if(check){ //whatever check you wish to do
        return 'Are you sure you want to leave?';
    }
});
$(window).unload(function(){
    $.ajax({
        type: 'POST',
        url: 'file.php',
        data: 'value=unload',
        async: false // this will not work if set to 'true'
    });
    alert('done');
});

<强> PHP:

if(isset($_POST['value'])){

    if($_POST['value']=='unload'){

        foreach(glob($targetFolder.'*.*') as $file){
            unlink($file); // remove every file
        }
        rmdir($targetFolder); // remove directory
    }
}

注意:我也有一个cron个工作,每周运行一次,以防万一。 php情况是用户获取特定 tmp 文件夹并上传文件(即简历,动机信...),如果他离开而未提交,则会删除文件和文件夹。< / p>

答案 7 :(得分:0)

我会对用户确认广告发布的时间设置时间限制。然后,有一个监视作业将在该预定时间触发,如果广告尚未确认,则从服务器中删除该图像。

答案 8 :(得分:0)

我不认为在用户真正离开页面时很容易检测到。我看到的大多数解决方案通常在会话超时时执行一些操作(例如删除临时文件)。

答案 9 :(得分:0)

使用时间戳为每个文件设置数据库条目。然后,当您的流程完成后,删除该条目。然后,每天一次,浏览表格,删除那里的所有文件,并从表格中删除这些记录......这是最安全的赌注。

答案 10 :(得分:0)

您是否只是在验证提交的数据后上传图片?