2012-09-22 92 views
2

我有一个用于数据库备份的目录以及一个每天都对数据库进行备份的PHP脚本。 但一个月后,我将有30个文件在备份目录中。 我该如何编写一个每天删除旧备份文件的PHP脚本,以便在我的目录中总是有10个备份文件? 一个新的备份存储时,最旧的备份文件将被删除等等...如何使用php删除目录中的旧文件

+0

请告诉我为什么你需要PHP来做到这一点。一个简单的'find'命令就可以做到。似乎过度怂恿它。 –

+0

我希望每天都能自动完成!我没有失望,发现是什么?! –

+0

只需转到http://linux.die.net/man/1/find阅读有关该命令并找出所需的参数。 (exec是一个有趣的) –

回答

2

通过目录进行备份与PHP备份你循环,然后删除最早的备份文件后:

$files = glob('backupfolder/*.bak'); 
if(count($files) > 10) 
    foreach($files as $file) 
    if(time() - filectime($file) > 10 * 24 * 60 * 60) 
     unlink($file); 
+0

time() - filectime($ file)返回一些负整数!那好吗? 号码,如: -1348332944 -1347040386 -1347691182 -1347456987 -1347686895 –

+0

刚跑的测试,我没有得到负数(如文件以后创建的):的index.php - 89 test.csv - 1417390 test.html - 891347 test.php - 1375369 test.xml - 1331536 – JvdBerg

+0

对不起,我的代码有问题。不管怎么说,还是要谢谢你 ;-) –

0

为什么要努力使用PHP? find命令和cron会诀窍

3

您可以读取备份目录并删除每个超过30天的文件。不过,我个人动态创建的文件,每个文件的格式如下:

database_dump_DD-MM-YYYY_HH:MM:SS.sql

这样我就可以考虑删除的文件名的文件。由于我不知道你的文件格式是什么,你可以像这样删除它们:

$files = readdir(opendir('backups')); //read directory for files 

foreach($files as $file){ 
    if(filemtime($file) > (time() + 2592000)){ //check if the file is older than 30 days 
     unlink($file); //delete 
    } 
}