【问题标题】:php / js - how do I delete a file when the page unloades?php / js - 页面卸载时如何删除文件?
【发布时间】:2012-06-01 15:21:11
【问题描述】:

我在这里遇到问题,我不确定是否可行,但我想在用户离开页面时删除文件...我目前有一个 php 脚本(见下文 ) 它处理文件的删除,但我不知道在页面卸载时如何运行它?

<?php
include 'js/db/db.php';
$film = $_GET['film'];
$movie = $_GET['org_film'];
$user = $_COOKIE['user'];
$filename = "movies/".$user."/".$film.".mp4";
if (file_exists($filename)) {
    unlink($filename);
    header('location: storage.php');
}
else{
    $filename = "movies/".$user."/".$film.".m4v";
    if (file_exists($filename)) {
        unlink($filename);
        header('location: storage.php');
    }
    else{
        echo " file doesn't Exist"; 
    }
}
?>

有什么想法吗?

【问题讨论】:

  • 简短的回答是你不能,因为你不能可靠地捕捉到用户离开页面的事件。您可能需要实现一个经常删除旧文件的清理脚本
  • 好的,但可以说window.onbeforeunload 是可靠的,我该怎么做?
  • 有一个事件window.onunload,您可以使用它来调用 PHP 文件的 AJAX 请求。作为@Pekka,它不会过于可靠,清理脚本是一种更好的方法
  • 好的,我会尝试 ajax 请求 :)
  • @Lenny - 这就像一所学校 - 你雇了一个看护人来做这件事。孩子们玩完后收拾一下。只需让脚本定期运行以整理文件系统(操场)。使用cron

标签: php javascript ajax onbeforeunload


【解决方案1】:

从您的代码看来,您正在创建一个临时文件,以便在特定时间段内向特定用户提供视频。这是一种非常低效的方法。你会过得更好:

  1. 使用您的数据库来跟踪哪些用户可以访问哪些视频,以及访问时长
  2. 在对视频页面的请求中,断言用户有权访问该文件,如果断言通过,则生成仅在短时间内有效的 签名 url并且可以在视频页面中用于传递您的电影。

签名的 URL 类似于:

http://path.to/your/movie.m4v?timestamp=2309583240&signature=234p9345u234234092wjdfl

其中时间戳是当前的 UNIX 时间戳,签名是时间戳的 SHA1 哈希值和一些只有您的应用程序知道的秘密。

Amazon S3 支持此功能 - 您还可以使用有限的读取权限将电影文件存储在 Amazon S3 上,并使用众多流行的 S3 库之一为您的用户生成有时间限制的签名 URL。

这将避免在磁盘周围移动大文件的需要,从而大大提高性能。它还可以更好地扩展,因为最大并发查看器不再受磁盘大小限制。

【讨论】:

  • 这给了我一个很好的主意,你可以将它作为一个临时文件,但用户可以选择它是否是临时文件
  • 关键是不需要为每个用户创建文件的副本。如果数据在每个用户之间共享,则无需这样做。存储很便宜,但没那么便宜:)
【解决方案2】:

您的主脚本/应用程序必须跟踪存储在数据库中的每个服务器请求的用户活动。

每隔 x 分钟运行一个由 cron 作业安排的 php 脚本,向 DB 询问最后一次用户活动(日期/时间)。在 y 分钟无活动后删除文件。

只是一个想法。

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2017-04-21
    • 1970-01-01
    • 2011-11-23
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多