當前位置: 首頁> 最新文章列表> ftp_rawlist + PHP Cron 實現自動備份檢測

ftp_rawlist + PHP Cron 實現自動備份檢測

gitbox 2025-05-26

在日常服務器維護中,定期備份至遠程FTP 服務器是一個常見的操作。然而,僅依靠上傳命令並不能確保備份文件真實存在或上傳成功。因此,我們可以結合PHP 的ftp_rawlist函數和系統計劃任務(Cron)機制,實現對FTP 上備份文件的自動檢測功能。

本文將介紹如何使用PHP 代碼列出FTP 目錄文件,並結合Cron 自動週期性執行檢測任務,以便在文件缺失或異常時及時發出提醒。

一、準備工作

在開始編寫代碼前,請確保以下幾點:

  1. 已有可訪問的FTP 服務器;

  2. PHP 環境支持ftp_*系列函數(需要啟用ftp擴展);

  3. 能夠配置Linux 下的Cron 定時任務;

  4. 可以接收通知(如郵件、Webhook、釘釘等)。

二、PHP 腳本示例

以下是一個用於檢測FTP 上備份文件是否存在的PHP 腳本:

<code> <?php

// FTP 配置
$ftp_host = 'ftp.gitbox.net';
$ftp_user = 'ftp_user';
$ftp_pass = 'ftp_password';
$ftp_dir = '/backups/';
$expected_file = 'backup_' . date('Ymd') . '.zip';

// 建立連接
$conn = ftp_connect($ftp_host);
if (!$conn) {
exit("無法連接到FTP 服務器\n");
}

// 登入
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
ftp_close($conn);
exit("FTP 登錄失敗\n");
}

// 切換目錄
if (!ftp_chdir($conn, $ftp_dir)) {
ftp_close($conn);
exit("無法進入目標目錄\n");
}

// 獲取文件列表
$raw_list = ftp_rawlist($conn, ".");
$found = false;

foreach ($raw_list as $line) {
$parts = preg_split("/\s+/", $line);
$filename = end($parts);
if ($filename === $expected_file) {
$found = true;
break;
}
}

ftp_close($conn);

// 輸出結果或發送通知
if ($found) {
echo "文件$expected_file 存在\n";
} else {
// 這裡可以集成郵件或Webhook通知
echo "警告:文件$expected_file 未找到\n";
// file_get_contents(" https://gitbox.net/notify?msg=backup_missing&file=$expected_file ");
}
</code>

說明:

  • ftp_rawlist()返回類似於UNIX ls -l的文件信息列表,需手動解析文件名;

  • date('Ymd')用於動態生成當天的備份文件名;

  • 可在else分支中接入自定義的告警系統,例如調用https://gitbox.net/notify這樣的Web API。

三、設置Cron 定時任務

假設我們希望每天凌晨3 點自動檢測備份文件,使用以下命令添加Cron 任務:

 crontab -e

然後添加:

 0 3 * * * /usr/bin/php /path/to/backup_checker.php >> /var/log/backup_check.log 2>&1

確保/path/to/backup_checker.php腳本路徑正確,且有執行權限。

四、進階優化建議

  • 日誌記錄:將檢測結果寫入日誌文件便於追踪;

  • 多FTP 支持:可封裝為函數支持多個FTP 源;

  • 異常處理:加入重試機制及詳細錯誤日誌;

  • 安全性:避免在腳本中明文保存密碼,考慮使用.env文件或系統變量。

五、總結

通過PHP 的ftp_rawlist函數配合Cron 定時任務,我們可以高效實現FTP 備份文件的自動檢測機制。該方案輕量靈活,適合中小型項目快速部署。對於備份可靠性要求較高的系統,此類自動化檢測手段是必不可少的保障。