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