最近一直在考虑网站备份的事情,备份在服务器上也是不放心的,最放心的还是下载到本地电脑里。随想了一个定时备份以及下载备份文件到本地电脑的方案,并且用代码实现,着实费了不少劲。
以下方案适合有html和php基础的朋友。
1、服务器上定时备份数据库。这一条我相信大多数网站应该都有吧,包括用开源CMS建站的朋友。不再详述。
2、服务器上定时取得截止到昨天0点修改的文件,这一条主要是把新上传的文件,主要是文章中用到的图片备份下来,这一步主要是获得新上传文件的路径,方便第三步下载用。在这一步骤里也可以获得第一步备份数据库的文件路径,方便下载。附主要代码思路:
//遍历文件
function listDir($dir,$ok_path){
if(is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
if((is_dir($dir."/".$file)) && $file!="." && $file!=".."){
//echo "<b><font color='red'>文件名:</font></b>",$file,"<br><hr>";
listDir($dir."/".$file,$ok_path);
}else{
if($file!="." && $file!=".."){
$file_path = $dir."/".$file;
//echo $file_path."<br>";
if (chkModifiedFile($file_path)) {
write_file($ok_path, str_replace("www/html", "http://bbs.houdao.com/", $file_path)."\r\n",'a+');
//echo str_replace("www/html", "http://bbs.houdao.com/", $file_path)."<br>";
}
}
}
}
closedir($dh);
}
} else {
//echo "找不到文件夹";
}
}
function chkModifiedFile($file) {
$last_modified = filemtime($file);
$bak_time = strtotime(date("Y-m-d",strtotime("-1 day")));
//$timediff = $time - $last_modified;
if ($last_modified > $bak_time) {
return true;
} else {
return false;
}
}
取得一天前修改的文件的地址放到一个固定的文件里,供第三步下载使用。
3、根据第二步生成的文件路径地址下载文件到本地电脑。附主要代码思路,注:该文件是在本地环境中运行的
$file = file_get_contents($filename1.$filename2);
if (!$file) {
die ($filename1.$filename2.",读取失败!");
}
$a = explode("\r\n",$file);
for ($i=0;$i<count($a)-1;$i++){
//$af = explode('/',$a[$i]);
//$bakfile=$af[count($af)-1];
$bakfile=$a[$i];
$bakfile1=str_replace("http://bbs.houdao.com/",$dirpath , $bakfile);
$bakfile2=str_replace("http://bbs.houdao.com/","" , $bakfile);
if (strstr($bakfile2,"/")) {
$b = explode("/",$bakfile2);
//echo $bs = $b[0];
@mkdir($dirpath.$b[0],0777);
}
//echo $bakfile1."</br>";
if ($gp->httpcopy($bakfile,$bakfile1)) {
echo $bakfile1.",OK"."</br>";
} else {
echo $bakfile1.",ERR"."</br>";
}
}
echo "共备份:".$i;
[ 此帖被清の神隐在2015-06-01 11:29重新编辑 ]