使用php编写程序,通过email备份网站
请使用php写一个备份wordpress网站,包括网站程序和mysql中的网站数据,然后打包压缩,通过email发送到25906016@qq.com邮箱
你需要一个PHP脚本,能够自动备份WordPress的网站程序文件和MySQL数据库数据,将它们打包压缩后,通过邮件发送到指定的QQ邮箱(25906016@qq.com)。
实现思路
- 数据库备份:使用
mysqldump命令导出WordPress数据库为SQL文件 - 文件备份:将WordPress网站根目录的所有文件打包
- 压缩打包:将数据库备份文件和网站文件包合并压缩为一个ZIP文件
- 邮件发送:使用PHP的
PHPMailer库(更稳定可靠)发送包含压缩包的邮件 - 清理临时文件:发送完成后删除临时生成的备份文件,避免占用空间
前置条件
- 服务器需安装
zip和mysqldump工具(Linux系统一般默认安装) - 安装PHPMailer(通过Composer或手动下载)
- PHP需开启
exec()、shell_exec()函数(需在php.ini中解除禁用) - QQ邮箱需开启SMTP服务并获取授权码(不是登录密码)
完整代码
<?php
/**
* WordPress网站自动备份并邮件发送脚本
* 作者:编程助手
* 注意:请根据实际情况修改配置信息
*/
// ==================== 配置信息(请根据你的实际情况修改)====================
// WordPress数据库配置
$db_host = 'localhost'; // 数据库主机
$db_user = 'wp_user'; // 数据库用户名
$db_pass = 'wp_password'; // 数据库密码
$db_name = 'wp_database'; // WordPress数据库名
// WordPress网站根目录(绝对路径)
$wp_root = '/var/www/html/wordpress';
// 临时备份目录(确保PHP有读写权限)
$backup_dir = '/tmp/wp_backup/';
// 邮件配置
$smtp_host = 'smtp.qq.com'; // QQ邮箱SMTP服务器
$smtp_port = 465; // SMTP端口(465为SSL,587为TLS)
$smtp_user = '你的QQ邮箱@qq.com'; // 发送邮件的QQ邮箱
$smtp_pass = '你的QQ邮箱SMTP授权码'; // QQ邮箱SMTP授权码
$to_email = '25906016@qq.com'; // 接收备份的邮箱
$email_subject = 'WordPress网站备份_' . date('Y-m-d_H-i-s');
// ==================== 核心备份逻辑 ====================
// 创建临时备份目录
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
// 1. 备份MySQL数据库
$db_backup_file = $backup_dir . 'wp_database_' . date('Y-m-d_H-i-s') . '.sql';
$mysqldump_cmd = "mysqldump -h{$db_host} -u{$db_user} -p{$db_pass} {$db_name} > {$db_backup_file}";
exec($mysqldump_cmd, $output, $return_var);
if ($return_var !== 0) {
die("数据库备份失败!错误码:{$return_var}");
}
// 2. 备份网站文件
$files_backup_file = $backup_dir . 'wp_files_' . date('Y-m-d_H-i-s') . '.zip';
$zip_cmd = "zip -r {$files_backup_file} {$wp_root}";
exec($zip_cmd, $output, $return_var);
if ($return_var !== 0) {
die("网站文件备份失败!错误码:{$return_var}");
}
// 3. 合并压缩为最终备份包
$final_backup_file = $backup_dir . 'wp_full_backup_' . date('Y-m-d_H-i-s') . '.zip';
$merge_zip_cmd = "zip -j {$final_backup_file} {$db_backup_file} {$files_backup_file}";
exec($merge_zip_cmd, $output, $return_var);
if ($return_var !== 0) {
die("合并备份文件失败!错误码:{$return_var}");
}
// ==================== 发送邮件 ====================
// 引入PHPMailer(如果通过Composer安装,使用autoload)
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// 初始化PHPMailer
$mail = new PHPMailer(true);
try {
// 服务器配置
$mail->SMTPDebug = 0; // 关闭调试模式(0=关闭,2=详细)
$mail->isSMTP(); // 使用SMTP
$mail->Host = $smtp_host; // SMTP服务器
$mail->SMTPAuth = true; // 启用SMTP认证
$mail->Username = $smtp_user; // SMTP用户名
$mail->Password = $smtp_pass; // SMTP密码(授权码)
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // 启用SSL加密
$mail->Port = $smtp_port; // 端口号
// 收件人
$mail->setFrom($smtp_user, 'WordPress备份助手');
$mail->addAddress($to_email); // 接收邮箱
// 邮件内容
$mail->isHTML(true); // 启用HTML格式
$mail->Subject = $email_subject;
$mail->Body = "您好,这是您的WordPress网站自动备份文件,备份时间:" . date('Y-m-d H:i:s');
$mail->AltBody = "您好,这是您的WordPress网站自动备份文件,备份时间:" . date('Y-m-d H:i:s');
// 添加附件
$mail->addAttachment($final_backup_file);
// 发送邮件
$mail->send();
echo "备份成功!邮件已发送至 {$to_email}";
} catch (Exception $e) {
die("邮件发送失败!错误信息:{$mail->ErrorInfo}");
}
// ==================== 清理临时文件 ====================
function deleteDir($dir) {
if (!file_exists($dir)) return true;
if (!is_dir($dir)) return unlink($dir);
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
if (!deleteDir($dir . DIRECTORY_SEPARATOR . $item)) return false;
}
return rmdir($dir);
}
// 删除临时备份目录及文件
deleteDir($backup_dir);
?>关键配置说明
- 数据库配置:修改
$db_host、$db_user、$db_pass、$db_name为你的WordPress数据库信息 - 网站目录:
$wp_root填写WordPress的绝对路径(如/var/www/html/wp) 邮件配置:
$smtp_user:填写你的QQ邮箱(发送方)$smtp_pass:QQ邮箱的SMTP授权码(需在QQ邮箱设置-账户中开启POP3/SMTP后获取)
权限要求:运行脚本的PHP进程需要有:
- 读取WordPress目录的权限
- 写入
$backup_dir目录的权限 - 执行
mysqldump和zip命令的权限
安装PHPMailer
方法1:Composer安装(推荐)
composer require phpmailer/phpmailer方法2:手动下载
- 从GitHub下载:https://github.com/PHPMailer/PHPMailer
- 将
src目录放到脚本同级目录 - 确保脚本中
require路径正确
总结
- 核心功能:脚本通过
mysqldump备份数据库、zip打包网站文件,合并后通过PHPMailer发送邮件 关键注意事项:
- 确保服务器安装了
zip和mysqldump工具 - QQ邮箱需开启SMTP并使用授权码(而非登录密码)
- PHP需解除
exec()、shell_exec()函数的禁用
- 确保服务器安装了
安全建议:
- 脚本不要放在网站根目录,避免被外网访问
- 定期更换SMTP授权码
- 备份完成后自动清理临时文件,避免磁盘空间占用
+++++++++++++================================
在linux下,怎样使用cron定时执行备份
你想知道在Linux系统中,如何通过cron定时任务来自动执行我们之前写的WordPress备份PHP脚本,实现定期自动备份。
实现步骤
1. 准备工作(确保脚本可独立运行)
在配置定时任务前,先手动测试脚本能否正常执行:
# 切换到脚本所在目录(示例路径)
cd /root/backup_scripts
# 执行PHP脚本(指定PHP完整路径,避免环境变量问题)
/usr/bin/php /root/backup_scripts/wp_backup.php如果脚本能正常生成备份并发送邮件,说明脚本本身无问题,可继续配置cron。
2. 编辑cron定时任务
Linux下管理cron任务主要用crontab命令,推荐使用当前运行脚本的用户(如root)配置,避免权限问题。
步骤1:打开crontab编辑界面
# 编辑当前用户的cron任务(推荐用root用户,避免权限不足)
sudo crontab -e
# 如果是普通用户,直接执行
crontab -e首次执行会提示选择编辑器,推荐选nano(简单易操作)。
步骤2:添加定时任务规则
在打开的编辑界面末尾,添加定时执行脚本的规则,格式如下:
# 定时规则 执行的命令
# 示例:每天凌晨2点执行备份脚本
0 2 * * * /usr/bin/php /root/backup_scripts/wp_backup.php > /var/log/wp_backup.log 2>&13. cron定时规则详解
cron的时间格式为:分 时 日 月 周 命令,每个字段含义如下:
| 字段 | 取值范围 | 说明 |
|---|---|---|
| 分 | 0-59 | 分钟 |
| 时 | 0-23 | 小时 |
| 日 | 1-31 | 日期 |
| 月 | 1-12 | 月份 |
| 周 | 0-7(0/7都代表周日) | 星期几 |
常用示例:
0 2 * * *:每天凌晨2点执行0 2 * * 0:每周日凌晨2点执行0 2 1 * *:每月1号凌晨2点执行*/30 * * * *:每30分钟执行一次
4. 关键配置说明
PHP路径:必须用
which php查看系统中PHP的完整路径(如/usr/bin/php或/usr/local/php/bin/php),避免cron环境变量缺失导致找不到PHP。# 查看PHP完整路径 which php日志输出:
> /var/log/wp_backup.log 2>&1是将脚本执行的日志(包括错误信息)输出到指定文件,方便排查问题:>:标准输出重定向2>&1:将错误输出重定向到标准输出,最终都写入日志文件
权限问题:
- 确保cron执行用户(如root)对脚本文件、WordPress目录、临时备份目录有读写权限。
- 脚本中的
exec()执行mysqldump/zip命令时,最好也用完整路径(which mysqldump/which zip查看)。
5. 验证cron任务是否生效
步骤1:查看已配置的cron任务
sudo crontab -l # 查看root用户的cron任务
crontab -l # 查看当前用户的cron任务能看到刚添加的备份脚本规则,说明配置成功。
步骤2:检查cron服务状态
# CentOS/RHEL 7+
systemctl status crond
# Ubuntu/Debian
systemctl status cron如果服务未运行,启动并设置开机自启:
# CentOS/RHEL 7+
systemctl start crond
systemctl enable crond
# Ubuntu/Debian
systemctl start cron
systemctl enable cron步骤3:查看执行日志
# 查看脚本执行日志
tail -f /var/log/wp_backup.log
# 查看cron系统日志(排查任务是否触发)
# CentOS/RHEL
tail -f /var/log/cron
# Ubuntu/Debian
grep CRON /var/log/syslog总结
- 核心步骤:先验证脚本可手动运行 → 用
crontab -e添加定时规则 → 配置日志输出便于排查 → 验证cron服务和任务。 关键注意事项:
- cron执行环境的环境变量缺失,必须使用PHP、mysqldump、zip等命令的完整路径。
- 配置日志输出,是排查cron任务失败的核心手段。
- 优先使用root用户配置cron,避免权限不足导致备份失败。
排错要点:
- 检查PHP/命令的完整路径是否正确。
- 查看脚本执行日志和cron系统日志。
- 确保执行用户对所有相关目录/文件有足够权限。