2

我编写了一个 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 是否正常工作)。

4

2 回答 2

0

尝试这个 :

if(strtotime($expire_date ) >= strtotime($mod_time))
于 2013-01-08T21:56:15.040 回答
0

你使用正确的命令ftp_rmdir

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

但我敢打赌,问题是这个函数,如 rmdir,要求目录为空。

这是一个递归删除函数警告!未经测试!

//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);
    }
}
于 2013-01-08T21:48:01.470 回答