由于 Artalk 是自托管的评论系统,服务器难免会遇上宕机,意外销毁等。这时如果没有备份评论数据,我们可能面临自我检讨的过程了

介绍

主要是利用开源项目 @PHPMailer 发送备份的数据文件至邮箱

实现以下功能:

  • 带有漂亮的邮件模板
  • 发送邮件后自动删除备份文件
  • 写出备份日志到当前目录

其实我也是东凑西凑,把需要的功能合并在一起。没办法,我只是个业余的 ~

下载依赖项目

前往 Releases 页面下载最新项目

上传压缩包到你的php空间并解压它,目录随意,你能记住就行了

创建备份文件

在你php空间任意目录内新建 Artalk_backup.php 空白文件

将下面代码粘贴进去,并根据自己实际情况填写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// PHPMailer 路径
require './vendor/phpmailer/phpmailer/src/Exception.php';
require './vendor/phpmailer/phpmailer/src/PHPMailer.php';
require './vendor/phpmailer/phpmailer/src/SMTP.php';

$mail = new PHPMailer(true);
try {
$mail->CharSet ="UTF-8"; // 设定邮件编码
$mail->SMTPDebug = 0; // 调试模式输出
$mail->isSMTP(); // 使用SMTP
$mail->Host = 'smtp.163.com'; // SMTP服务器
$mail->SMTPAuth = true; // 允许 SMTP 认证
$mail->Username = 'xxxx@163.com'; // SMTP 用户名
$mail->Password = 'xxxx'; // SMTP 密码
$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议
$mail->Port = 465; // 服务器端口 25 或者465
$mail->setFrom('xxxx@163.com', 'Artalk评论备份'); // 发件人
$mail->addAddress('1037886804@qq.com', '笨蛋海绵'); // 收件人

// 创建压缩文件
$path = "./data/comments.data.json"; // 需要打包的文件名
$path2 = "./data/comments.config.json"; // 需要打包的文件名
$filename = 'Artalk_data(' . time() . ').zip'; // 压缩包文件名
$zip = new ZipArchive(); // new一个ZipArchive类
$zip->open($filename,ZipArchive::CREATE); // 新建一个压缩包
$zip->addFile($path,basename($path)); // 向压缩包中添加文件
$zip->addFile($path2,basename($path2)); // 向压缩包中添加文件
$zip->close(); // 关闭压缩包

// 发送附件
$mail->addAttachment($filename, 'Artalk_data.zip'); // 发送附件并且重命名

date_default_timezone_set('Asia/Shanghai'); // 设置时区
$time = date('Y-m-d H:i:s'); // 获取时间
// 主题内容
$mail->isHTML(true); // 是否以HTML文档格式发送
$mail->Subject = '👉 叮咚,您博客评论数据备份成功啦';
$Html = '
<div style="background-color:white;border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;width:500px;margin:50px auto;color:#555555;font-size:12px;">
<h2 style="border-bottom:1px solid #DDD;font-size:14px;font-weight:normal;padding:13px 0 10px 8px;">
<span style="color: #12ADDB;font-weight:bold;">
您的博客Artalk评论数据已备份:
</span>
</h2>
<div style="padding:0 12px 0 12px; margin-top:18px;">
<div style="background-color: #f5f5f5;padding: 10px 15px;margin:18px 0;word-wrap:break-word;">
<p>备份时间:' . $time . '</p>
</div>
<p><a style="text-decoration:none; color:#12addb" href="https://artalk.ml/Artalk备份日志.txt" target="_blank" rel="noopener">查看最后备份时间</a></p>
</div>
</div>';
$mail->Body = $Html;
$mail->AltBody = '备份日期' . $time;

$mail->send();
echo "<script>alert('邮件发送成功啦')</script>";
unlink($filename); // 删除压缩包
// 写出备份日志
$myfile = fopen("Artalk备份日志.txt", "w") or die("Unable to open file!");
fwrite($myfile, '上一次备份于: ' . $time);
fclose($myfile);
} catch (Exception $e) {
unlink($filename); // 删除压缩包
echo "<script>alert('邮件发送失败')</script>";
echo $mail->ErrorInfo;
}

只需要配置 6~815~22 行就可以了

主要是 SMTP 用户名 SMTP 密码 一定要填写对

开始备份数据

访问 https://域名/Artalk_backup.php 就能自动备份 Artalk 的评论数据并发送到你的邮箱了

此时,你会想我会傻到每天自己定时访问进行备份吗?

跟着我走往下看 ~

创建定时任务

1.注册cron-job帐号

注册地址:https://cron-job.org/en/signup/

注册时的Time zone时区选择Asia/Shanghai

2.添加一个计划任务

登陆之后依次点击 Members -> Cronjobs -> Create cronjob

  • Title, Address
    Title 任务名称, 可以随便填写一个
    Address 任务地址,填写 https://域名/Artalk_backup.php

  • Schedule
    选择 User-defined 进行自定义设置,按住Ctrl可多选
    没什么要求,你需要什么时候备份一次,就选择哪个
    Days of month: 每月的第几天
    Days of week: 每月的星期几
    Months: 月份
    Hours: 小时
    Minutes: 分钟

  • Notifications
    邮件通知选项,可以不用修改,也可以根据自己的需要修改

  • Common
    勾选Save responses, 保存唤醒日志, 在 Members 有日志

最后点击Create cronjob,创建任务就行了

完成

尽情享受人生的每一刻 ~