为了充分利用阿里云的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资源截图:
结束。