用户下载文件后将其删除

php
2022-08-30 09:12:29

我正在使用它向用户发送文件

header('Content-type:  application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile($file);

我想在用户下载后删除此文件,我该怎么做?

编辑:我的场景是这样的,当用户点击下载按钮时,我的脚本将创建一个临时zip文件,然后用户下载它,然后该临时zip文件将被删除。

编辑2:OK最好的方式似乎是运行一个cron作业,该作业将每小时清理一次临时文件。

编辑3:我用测试了我的脚本,除非用户取消下载,否则它可以正常工作。如果用户取消下载,zip 文件将保留在服务器上。所以现在这已经足够了。:)unlink

编辑4:哇! 把戏!connection_aborted()

ignore_user_abort(true);
if (connection_aborted()) {
    unlink($f);
}

即使用户取消下载,此文件也将删除该文件。


答案 1
unlink($filename);

这将删除该文件。

它需要与ignore_user_abort()Docs结合使用,以便即使用户取消下载,它仍然被执行。unlink

ignore_user_abort(true);

...

unlink($f);

答案 2

我总是使用以下解决方案,使用register_shutdown_function

register_shutdown_function('unlink', $file);

推荐