PHP / js - 如何在页面卸载时删除文件


php / js - how do I delete a file when the page unloades?

我这里有一个问题,我不确定是否可能,但我想在用户离开页面时删除文件......我目前有一个 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"; 
    }
}
?>

有什么想法吗?

从您的代码来看,您似乎正在创建一个临时文件,以便您可以在特定时间内将视频传递给特定用户。这是一种效率极低的方法。你会更好:

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

签名 URL 如下所示:

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

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

Amazon S3

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

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

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

每 x 分钟运行一次由 cron 作业调度的 php 脚本,该脚本向数据库请求上次用户活动(日期/时间)。在 y 分钟没有活动后删除文件。

只是一个想法。