1

我想为我的服务器上的文件和文件夹创建一个备份脚本,我发现了这个:

# Name of the buckup file
$filename = 'BACKUP_' . date('Y.m.d') . '.tar.gz';
# Target path where to save the file
$targetPath = '/path/to/backup/';
# Directory to backup
$dir = "/path/to/files/";  


# Execute the tar command and save file
system( "tar -pczf ".$targetPath ."".$filename." ".$dir );

效果很好,然后我可以将 URL 传递给脚本和正确的标题并下载文件。

我的问题是我会经常运行它并且不想将备份保留在服务器上。所以我试图找到一种创造性的方法来创建一个被删除的临时文件。问题是一些文件可能相当大,我无法知道文件何时完全下载。

4

2 回答 2

2

您可以在 /tmp 中创建备份文件,然后使用:

# Name of the buckup file
$filename = 'BACKUP_' . date('Y.m.d') . '.tar.gz';
# Target path where to save the file
$targetPath = '/path/to/backup/';
# Directory to backup
$dir = "/path/to/files/";  
# Execute the tar command and save file
system( "tar -pczf ".$targetPath ."".$filename." ".$dir );

readfile("{$targetPath}{$filename}"); // outputs file contents to a browser
unlink("{$targetPath}{$filename}"); // removes file from disk

阅读http://php.net/manual/ru/function.readfile.php了解更多信息。

PS 此外,您可以使用 ZipArchive 类(内置)更灵活地创建自己的存档。

于 2012-09-11T17:59:35.727 回答
0

在数据库中添加文件名/路径和创建的时间戳,编写一个 cron 作业来删除大于您想要保留它的时间的任何内容。让它每小时运行一次,30 分钟。不管你觉得多么频繁是必要的。

至于它是否被下载,创建一个下载管理器。/download/file/id,其中 id 可以是该表中的 PK,并且仅在尚未下载时才删除,除非它已经 48 小时,或者类似的东西。

于 2012-09-11T17:56:32.327 回答