2013-01-08 195 views
2

我寫了一個MySQL數據庫備份腳本,用於將備份文件存儲在遠程FTP服務器中。它在根目錄中創建一些文件夾,以數據庫名稱命名,然後在每個文件夾中創建一些以當前日期命名的文件夾(格式:yyyy-mm-dd),並且這些文件夾上傳按確切時間命名的備份文件。刪除舊的遠程FTP文件夾

我還需要刪除舊的二級文件夾(它是按日期命名的);我的意思是4天以上的文件夾。這是我遇到的問題。我用ftp_nlist嘗試了一些代碼,我可以用它列出文件夾,我也用ftp_mdtm來獲取創建日期並將其與過期日期進行比較。但結果並不好。這裏是我的代碼:

... 

$skip = array('.', '..', '.ftpquota', '.htaccess'); 
$expire_date = date('Y-m-d', strtotime('-4 days', time())); 

$ff_list = ftp_nlist($con, $db_dir); 
foreach($ff_list as $item) 
{ 
    if(in_array($item, $skip)) 
    { 
     continue; 
    } 
    $mod_time = ftp_mdtm($con, $item); 
    if(strtotime($expire_date) >= $mod_time) 
    { 
     ftp_rmdir($con, $item); 
    } 
} 

... 

請參加我需要與他們所有的內容來刪除舊文件夾,所以我需要合適remove命令(我不知道是否ftp_rmdir正常工作)。

+0

我還可以檢查每個文件夾的名稱,並採取日數則與當今數字比較。這是因爲文件夾名稱是保存日期(yyyy-mm-dd),但我更喜歡做類似上面的事情。我更喜歡不指望文件夾名稱。 –

回答

0

你使用了正確的命令ftp_rmdir

http://php.net/manual/en/function.ftp-rmdir.php

但我敢打賭,問題是,這個功能,如命令rmdir,要求該目錄是空的。

這是一個遞歸刪除函數警告! UNTESTED!

//credentials 
$host = "ftp server"; 
$user = "username"; 
$pass = "password"; 

//connect 
$handle = @ftp_connect($host) or die("Could not connect to {$host}"); 

//login 
@ftp_login($handle, $user, $pass) or die("Could not login to {$host}"); 

function recursiveDelete($directory){ 
    //try to delete 
    if(!(@ftp_rmdir($handle, $directory) || @ftp_delete($handle, $directory))){ 
     //if the attempt to delete fails, get the file listing 
     $filelist = @ftp_nlist($handle, $directory); 

     //loop through the file list and recursively delete each file in the list 
     foreach($filelist as $file){ 
      recursiveDelete($file); 
     } 

     //if the file list is empty, delete the directory we passed 
     recursiveDelete($directory); 
    } 
} 
+0

謝謝,但主要問題是日期比較! :D我應該只刪除超過4天的文件夾。 –

0

試試這個:

if(strtotime($expire_date) >= strtotime($mod_time)) 
+0

謝謝,我現在檢查。 –

+0

希望這一切工作:) – Mark

相關問題