wordpress网站文件备份至OSS

By | 2017年4月1日

为了充分利用阿里云的OSS存储资源,实现了每天定时把网站文件打包后上传到OSS中,上传功能使用了官方提供的OSS SDK,定时功能使用Windows计划任务或者Linux的cron,有些虚拟主机提供CPanel面板的,里面自带定时功能,非常方便。

1、首先下载OSS的SDK文件,地址:https://github.com/aliyun/aliyun-oss-php-sdk

然后我把Autoload.php文件移到了和OssClient.php同目录,Autoload.php文件的内容更改为:

<?php
function classLoader($class)
{
    $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
    $file = $path . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
}
spl_autoload_register('classLoader');

$file路径更改了下。

2、这是备份脚本的文件结构,一个配置文件,一个主运行文件,OSS文件夹中是SDK文件:

OSS SDK目录结构:

3、$config文件内容定义了OSS Key等参数:

<?php
define('OSS_ACCESS_ID', 'xxxxxxxxxxxxxxxxxx');
define('OSS_ACCESS_KEY', 'xxxxxxxxxxxxxxxx');
//使用的自定义域名,如果不是自定义域名一般填写类似oss-cn-beijing.aliyuncs.com的地址,可以在OSS管理台中查看
define('OSS_ENDPOINT', 'files.coderecord.cn');
define('OSS_BACKET', 'devonios');
//需要备份的文件夹路径
define('BACKUP_DIR',$_SERVER['DOCUMENT_ROOT']);
//备份出来的压缩包名称
$config['backup']['filename'] = "backup.zip";
//需要忽略备份的文件名称
$config['ignore']['file'] = ["backup.zip"];

4、run.php文件为每次运行的文件:

<?php
require_once "config.php";
require_once "OSS/Autoload.php";

use OSS\OssClient;
use OSS\Core\OssException;

function uploadFile($object,$file){
	$ossClient = new OssClient(OSS_ACCESS_ID, OSS_ACCESS_KEY, OSS_ENDPOINT, true);
	$result = $ossClient->uploadFile(OSS_BACKET,$object,$file);
	return $result;
}

function addFileToZip($path,$zip){
    $handler=opendir($path);
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){
	    //文件夹
            if(is_dir($path."/".$filename)){
		addFileToZip($path."/".$filename, $zip);
            }else{
		if(!in_array($filename,$config['ignore']['file'])){
		   $zip->addFile($path."/".$filename);
		}
            }
        }
    }
    @closedir($path);
}

function zipFile($saveFileName){
        if($saveFileName){
		$zip=new ZipArchive();
		if($zip->open($saveFileName, ZipArchive::OVERWRITE)=== TRUE){
			addFileToZip(BACKUP_DIR, $zip);
			$zip->close();
		}
	}
}

//1、压缩所有文件
zipFile($config['backup']['filename']);

//2、上传压缩的文件
$y = date('Y');
$m = date('m');
$d = date('d');
//上传到OSS的文件名,包含完整的路径地址,该路径地址会自动创建
$objectName = 'backupfile/'.$y.'/'.$m.'/'.$y.$m.$d.'.zip';
$result = uploadFile($objectName,$config['backup']['filename']);
if($result){
	//备份成功后,删除压缩文件
	unlink($config['backup']['filename']);
	echo "备份成功!";
}

使用ZipArchive类压缩文件,然后就利用SDK上传到OSS中,上传完成后删除压缩包。

OSS资源截图:

结束。