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); }