php备份整个项目并压缩然后发送邮件
直接上代码,php备份整个项目并压缩然后发送邮件,修改下面的邮箱配置和要备份的目录即可。
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
// 需要使用phpmailer/phpmailer包,先进行包的引用
require 'vendor/autoload.php';
ini_set('memory_limit', '512M');
// 配置备份目录和邮件配置
$backupDir = '/www/wordpress5.6'; // 需要备份的目录
// 本地存储
$localPath = '/tmp/backup/';
$backupFile = 'backup-' . date('Ymd') . str_replace('/', '_', $backupDir) . '.zip'; // 备份文件名
$zipPassword = ''; // 可选的zip文件密码,为空表示不加密
$emailHost = 'smtp.163.com'; // 邮箱SMTP服务器地址
$emailUsername = 'xxx@163.com'; // 发件人邮箱
$emailPassword = 'xxxx'; // 发件人邮箱密码
$emailPort = 465; // 邮箱SMTP服务器端口号
$emailEncryption = 'ssl'; // 邮箱SMTP服务器加密方式
$recipient = '1037xxx965@qq.com'; // 收件人邮箱
$subject = 'Backup ' . $backupFile; // 邮件主题
$body = '项目备份。'; // 邮件正文
if (!file_exists($localPath)) {
if (!mkdir($localPath, 0777, true) && !is_dir($localPath)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $localPath));
}
}
// 依次尝试可用的函数
$functions = ['exec', 'shell_exec', 'system', 'popen'];
$success = false;
foreach ($functions as $function) {
if (function_exists($function) && !in_array($function, explode(',', ini_get('disable_functions')))) {
$command = "cd $backupDir && zip -r $backupFile ./*";
$output = $function($command);
// 判断是否成功执行命令
if (strpos($output, 'adding:') !== false) {
// 如果压缩成功,输出成功信息,跳出循环
echo '压缩成功';
$success = true;
break;
}
}
}
// 如果所有函数都失败,输出错误信息
if (!$success) {
echo '无可用函数执行该命令';
// 创建zip文件
$zip = new ZipArchive();
$zipfile = $localPath . '/' . $backupFile;
if ($zip->open($zipfile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
$dir = new DirectoryIterator($backupDir);
foreach ($dir as $fileinfo) {
if ($fileinfo->isFile()) {
$file = $fileinfo->getBasename();
// 将文件追加到zip文件中,不读入内存
$zip->addFile($backupDir . '/' . $file, $file);
}
}
$zip->setArchiveComment('Backup created on ' . date('Y-m-d H:i:s'));
$zip->close();
} else {
echo 'Failed to create backup zip file.';
exit;
}
}
// 压缩后执行其他代码
if ($success) {
// do something after compression succeed
echo "Backup file created: $backupFile";
}
// 发送邮件
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = $emailHost;
$mail->SMTPAuth = true;
$mail->Username = $emailUsername;
$mail->Password = $emailPassword;
$mail->SMTPSecure = $emailEncryption;
$mail->Port = $emailPort;
$mail->setFrom($emailUsername, 'Backup');
$mail->addAddress($recipient);
$mail->addAttachment($zipfile);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->send();
echo 'Backup file sent successfully!';
} catch (Exception $e) {
echo 'Backup file sending failed. Error: ', $mail->ErrorInfo;
}
// 删除旧的备份文件和压缩文件
$old_backup = $localPath . date("Ymd", strtotime("-1 day")) . "_backup.sql";
if (file_exists($old_backup)) {
unlink($old_backup);
}