2012-09-22 83 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 
    } 
}