删除旧的远程FTP文件夹

时间:2013-01-08 21:39:27

标签: php ftp

我编写了一个MySQL数据库备份脚本,用于将备份文件存储在远程FTP服务器中。它在根目录中创建一些以数据库名称命名的文件夹,然后在每个文件夹中创建一些按当前日期命名的文件夹(格式:yyyy-mm-dd),这些文件夹将上传以精确时间命名的备份文件。

我还需要删除旧的二级文件夹(按日期命名);我的意思是超过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);
    }
}

...

请参加我需要删除旧文件夹及其所有内容,所以我需要合适的删除命令(我不知道ftp_rmdir是否正常工作)。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

试试这个:

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