php与python技术分享 php与python技术分享
  • PHP 相关
  • Python 相关
  • 综合内容
  • 工具箱
  • 登录
首页 › PHP 相关 › php 实现网站备份功能,一件备份目标网站至本地

php 实现网站备份功能,一件备份目标网站至本地

新程序
2025-05-08 8:01:58
本文摘要 DeepSeek
该 PHP 脚本实现了一个网站备份工具,主要功能包括:1. 通过 POST 请求接收备份 URL 和保留份数;2. 验证 URL 有效性后,从目标服务器获取备份文件;3. 下载并保存到本地,同时删除旧备份以控制数量;4. 通知源服务器删除已备份文件。脚本包含错误处理机制,会返回 JSON 格式的操作结果。适用于站长通过宝塔面板定时执行备份任务,实现自动化网站数据保护。核心流程为:请求验证→文件获取→本地存储→清理旧文件→远程删除,确保备份高效且存储可控。

php实现网站备份功能,一件备份目标网站至本地-php与python技术分享

目标网站上传握手文件,设置本地保留文件份数,也可以挂宝塔计划任务定时执行备份,站长备份利器

核心代码:

// 处理备份设置
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['bfurl']) && isset($_POST['number']) && isset($_SESSION['authenticated'])) {
    $backupUrl = $_POST['bfurl'];
    $backupCount = intval($_POST['number']);

    // 验证备份 URL 格式
    if (!filter_var($backupUrl, FILTER_VALIDATE_URL)) {
        $errorMessage = "请输入有效的 URL,需包含 http 或 https。";
    } else {
        // 移除 URL 末尾的 /,确保后续拼接正确
        $cleanedBackupUrl = rtrim($backupUrl, '/');

        // 服务器 A 的备份脚本 URL
        $serverAUrl = $cleanedBackupUrl . '/backup.php';

        // 发起请求获取备份文件
        $backupFile = @file_get_contents($serverAUrl, false, $context);
        if ($backupFile === false) {
            $error = error_get_last();
            $errorMessage = "请检查 backup.php 文件是否已上传至 $cleanedBackupUrl 根目录";
            error_log("无法从 $serverAUrl 获取备份文件");
        } else {
            if (!strpos($backupFile, '无法创建备份文件')) {
                // 检查备份目录是否可写
                $backupDir = __DIR__;
                if (!is_writable($backupDir)) {
                    $errorMessage = "备份目录不可写: ". $backupDir;
                    error_log("备份目录不可写: ". $backupDir);
                } else {
                    // 下载备份文件
                    $serverABackupUrl = $cleanedBackupUrl . '/' . $backupFile;
                    $backupFilePath = $backupDir . '/' . $backupFile;
                    $downloaded = @file_put_contents($backupFilePath, @file_get_contents($serverABackupUrl, false, $context));
                    if ($downloaded === false) {
                        $error = error_get_last();
                        $errorMessage = "下载备份文件失败";
                        error_log("未能下载备份文件");
                    } else {
                        // 获取备份目录下所有的备份文件
                        $backupFiles = glob($backupDir . '/backup_*.zip');
                        usort($backupFiles, function ($a, $b) {
                            return filemtime($b) - filemtime($a);
                        });

                        // 只保留最近的指定数量份备份文件
                        if (count($backupFiles) > $backupCount) {
                            $filesToDelete = array_slice($backupFiles, $backupCount);
                            foreach ($filesToDelete as $file) {
                                if (!unlink($file)) {
                                    $error = error_get_last();
                                    error_log("多余备份文件删除失败");
                                }
                            }
                        }

                        // 向服务器 A 发送删除请求
                        $serverBUrl = $cleanedBackupUrl . '/backup.php';
                        $deleteUrl = $serverBUrl . '?file=' . urlencode($backupFile);
                        $ch = curl_init($deleteUrl);
                        // 设置 curl 超时时间
                        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                        $response = curl_exec($ch);
                        if ($response === false) {
                            $error = curl_error($ch);
                            $errorMessage = "向服务器发送删除请求失败";
                            error_log("未能发送删除请求");
                        } else {
                            $backupSuccess = true;
                        }
                        curl_close($ch);
                    }
                }
            } else {
                $errorMessage = "备份失败";
            }
        }
    }

    // 处理完成后返回 JSON
    header('Content-Type: application/json');
    if ($backupSuccess) {
        echo json_encode(['status' => 'success', 'message' => '备份成功,请刷新页面查看备份文件!']);
    } else {
        echo json_encode(['status' => 'error', 'message' => $errorMessage]);
    }
    exit;
}

 

声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
2
纯 PHP 实现利用 openai 接口挖词功能
上一篇
纯 php 无需数据库实现蜘蛛池外租平台功能,含 usdt 在线充值回调
下一篇

猜你喜欢

  • 纯 php 无数据库实现在线购物网站、发卡平台功能
  • 纯 php 无需数据库实现蜘蛛池外租平台功能,含 usdt 在线充值回调
  • 纯 PHP 实现利用 openai 接口挖词功能
  • 长尾词、相关词、下拉词在线挖掘小工具
  • 在线版网页扒站小工具,纯 php 实现

新程序

11
文章
0
评论
21
获赞

全站搜索

专题展示

纯 php 无数据库实现在线购物网站、发卡平台功能
2025-05-09 9:40:41
纯 php 无需数据库实现蜘蛛池外租平台功能,含 usdt 在线充值回调
2025-05-08 8:09:30
php 实现网站备份功能,一件备份目标网站至本地
2025-05-08 8:01:58

最近发布

  • 纯 php 无数据库实现在线购物网站、发卡平台功能
  • 纯 php 无需数据库实现蜘蛛池外租平台功能,含 usdt 在线充值回调
  • php 实现网站备份功能,一件备份目标网站至本地
  • Python 单文件实现根据关键词利用 openai 等接口批量写文章
  • 纯 PHP 实现利用 openai 接口挖词功能
Copyright © 2025 php 与 python 技术分享.
现在登录
  • PHP 相关
  • Python 相关
  • 综合内容
  • 工具箱