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


所有用户都可以去薅羊毛,192元充值200元话费!先到先得!导航栏话费充值,正规可靠,快充慢充自由选择。
欧阳逸资源站 » php备份整个项目并压缩然后发送邮件

发表评论