PHP备份&下载

时间:2012-09-11 17:54:45

标签: php backup temp

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

# 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传递给脚本和正确的标题并下载文件。

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

2 个答案:

答案 0 :(得分: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类(内置版)更灵活地创建自己的存档。

答案 1 :(得分:0)

在数据库中添加文件名/路径和创建的时间戳,编写一个cron作业以删除大于您想要保留它的时间。让它每小时运行30分钟。无论如何经常你认为是必要的。

至于是否已下载,请创建下载管理器。 / download / file / id,其中id可以是该表中的PK,只有在尚未下载的情况下才删除,除非它已经48小时,或者其他类似的东西。