完美站点备份方案(php脚本实现)

完美的站点数据备份方案需要解决以下两个问题:

  1. 如何实现定时备份?
  2. 如何发送带附件的邮件?

下面一一说明相关函数和技术实现

 

一、自动备份数据库和文件(PHP)

 

<?php
ignore_user_abort(true);// 该函数ignore_user_abort参数为true时候,表示当浏览器端关闭窗口后,脚本依然保持执行状态(默认会停止执行)。 
set_time_limit(0); // 设置php脚本执行最长时间,0表永不停止(除非服务器停止) ,php.ini中同样可设置改项
$interval=10; //设置该脚本每间隔为10秒钟执行一次
$i=1;
do{
mkdir($i); //执行你要求循环的操作,此处为创建1、2、3……命名的文件夹
$i++;sleep($interval); // 等10秒钟
}while(true); 
?>

 

执行以上脚本,然后关闭窗口,发现php脚本目录中出现1、2、3……这种文件,而且不停止,除非重启apache服务器。

 

因此利用以上函数ignore_user_abort,将时间间隔设置为3600*24即为每天备份一次数据,备份数据使用dump命令即可,或者借用一些目前网上现成的php备份数据的类即可。

 

二、发送带附件的邮件(PHP)

 

有两种方式,一种是smtp,一种是普通mail方式。

 

两方式区别大概形容是这样的:使用stmp方式,可以在任何没有邮件服务的地方,比如你自己电脑上建一个php平台,然后php脚本里需要填写你的一个邮箱和密码(比如163邮箱),比如发给qq邮箱用户,该用户就会显示是从你的163邮箱发送出来的邮件,因为smtp必须要账号密码,所以发出去的邮件跟你直接在163邮箱里发出的没有区别,在qq收件用户看是没有区别的。这个发邮件过程你需要联网,相当于php代理你登陆你的163邮箱发给你朋友邮件,同时你的163邮箱需要开启stmp服务的支持,stmp服务本省也大概这样的意思;而普通mail方式,就是以你的主机来说,需要你的主机有邮箱服务器才可以,这种形式正常情况无法在用户电脑发送邮件,需要你购买的主机商提供邮局服务,发出去显示的地址也就是你主机商提供的邮箱地址,例如51php给用户提供一个邮箱地址是@hkip923.u9bbs.com 这种,因为是免费,所以不太好看,以下就这两种方式的代码做说明。

 

wordpress核心代码中中有发邮件的类,这里可以借用,因此包含wp-includes/class-phpmailer.php和wp-includes/class-smtp.php这个两个文件即可。

 

1、STMP方式

 

<?php
include('wp-includes/class-phpmailer.php');
include('wp-includes/class-smtp.php');

$mail=new PHPMailer();
$mail->IsSMTP();// 设置PHPMailer使用SMTP服务器发送Email
//$mail->CharSet='GB2312';// 设置邮件的字符编码,若不指定,则为'UTF-8'

// 添加收件人地址,可以多次使用来添加多个收件人
$mail->AddAddress("[收件人]@qq.com","galois21");
//$address = $_POST[‘address’]; $mail->AddAddress("$address","个");//收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名")

// 设置邮件头的From字段。
$mail->From='[发件人]@163.com';//邮件发送者email地址     该处只用来展示,并非不一定要求跟实际地址一样,但是对于网易的SMTP服务,这部分必须和你的实际账号相同,否则会验证出错。
$mail->FromName='galois21的来信';// 设置发件人名字

$mail->Subject = "PHPMailer测试邮件"; //邮件标题
$mail->Body = "Hello,这是测试邮件"; //邮件内容,设置邮件正文

// 设置SMTP服务器。这里使用网易的SMTP服务器,详细查阅http://mail.163.com/mailhelp/client.htm
$mail->Host="smtp.163.com";// 您的企业邮局域名
$mail->SMTPAuth =true; // 启用SMTP验证功能,设置为"需要验证"

// 设置用户名和密码,即网易邮件的用户名和密码。
$mail->Username="[发件人]@163.com"; // 你的163邮箱地址(请填写完整的email地址)
$mail->Password="*****"; // 你163邮箱的密码

$mail->AddReplyTo("", "");
$mail->AddAttachment("/index.php"); // 添加附件,自己按照路径修改
$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式
$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; //附加信息,可以省略

if(!$mail->Send())
{
    echo "邮件发送失败";     echo "错误原因: ".$mail->ErrorInfo; 
    exit;
}
else{echo "邮件发送成功";}
?>

 

2、Mail方式

 

mail方式需要较简单,但需要你买的虚拟主机支持

 

<?php
include('wp-includes/class-phpmailer.php');
include('wp-includes/class-smtp.php');

$phpmailer = new PHPMailer();          

            // 获取主机的邮箱地址
            $sitename = strtolower( $_SERVER[‘SERVER_NAME’] );
            $from_email = 'wordpress@' . $sitename;//这是wordpress的部分代码,你可以修改成自己喜欢的任何名字,
            $from_name = 'WordPress';

            // Empty out the values that may be set
            $phpmailer->ClearAddresses();
            $phpmailer->ClearAllRecipients();
            $phpmailer->ClearAttachments();
            $phpmailer->ClearBCCs();
            $phpmailer->ClearCCs();
            $phpmailer->ClearCustomHeaders();
            $phpmailer->ClearReplyTos();
            $phpmailer->AddAddress("[收件人]@qq.com");
            $phpmailer->AddAttachment("index.php","附加名");
            $phpmailer->Body = "哈哈,终于发出去了!";
            $phpmailer->CharSet ="UTF-8";
            $phpmailer->From = $from_email ;
            $phpmailer->FromName =$from_name;
            $phpmailer->IsMail();
            $phpmailer->Subject = "发出去吧";
            $result = @$phpmailer->Send();

     var_dump($result);}

?>

浏览量(920) | 此条目发表在lamp专区, 计算机分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据