Position actuelle: Accueil> Derniers articles> Utilisez ftp_rawlist pour obtenir des fichiers de mise à jour quotidiens dans une tâche chronométrée

Utilisez ftp_rawlist pour obtenir des fichiers de mise à jour quotidiens dans une tâche chronométrée

gitbox 2025-05-26

Introduction de la scène

Supposons que nous ayons un serveur FTP distant qui met à jour les fichiers chaque jour. Notre objectif est de se connecter automatiquement au serveur via des scripts PHP dans les premières heures de chaque matin, de vérifier quels fichiers sont récemment téléchargés ce jour-là, puis de télécharger ces fichiers localement pour un traitement ultérieur.

Étape 1: Connectez-vous au serveur FTP

Tout d'abord, nous devons nous connecter au serveur FTP et nous connecter:

 $ftp_host = 'ftp.gitbox.net';
$ftp_user = 'username';
$ftp_pass = 'password';

$conn_id = ftp_connect($ftp_host);
if (!$conn_id) {
    die("Impossible de se connecter à FTP serveur");
}

$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if (!$login_result) {
    ftp_close($conn_id);
    die("FTP La connexion a échoué");
}

Étape 2: Obtenez la liste des répertoires

Utilisez ftp_rawlist pour obtenir des informations sur le fichier dans le répertoire cible:

 $remote_dir = '/updates/';
$raw_list = ftp_rawlist($conn_id, $remote_dir);
if ($raw_list === false) {
    ftp_close($conn_id);
    die("Impossible d'obtenir une liste de fichiers");
}

Étape 3: analyser la liste des fichiers

FTP_RAWLIST Renvoie un ensemble de lignes similaires à la sortie de la commande UNIX LS -L . Nous devons analyser ces lignes, extraire le nom du fichier et modifier l'heure:

 $today = date('M d'); // e.g., "May 23"
$files_to_download = [];

foreach ($raw_list as $line) {
    $parts = preg_split("/\s+/", $line, 9);
    if (count($parts) < 9) continue;

    $month = $parts[5];
    $day = str_pad($parts[6], 2, '0', STR_PAD_LEFT);
    $file_time_or_year = $parts[7];
    $name = $parts[8];

    if ("$month $day" == $today) {
        $files_to_download[] = $name;
    }
}

Étape 4: Téléchargez le fichier

Puis téléchargez les fichiers mis à jour ce jour-là:

 foreach ($files_to_download as $file) {
    $local_file = __DIR__ . "/downloads/$file";
    $remote_file = $remote_dir . $file;
    if (ftp_get($conn_id, $local_file, $remote_file, FTP_BINARY)) {
        echo "Téléchargez le fichier avec succès:$file\n";
    } else {
        echo "Échec du téléchargement:$file\n";
    }
}

Étape 5: Fermez la connexion

Une fois la tâche terminée, fermez la connexion FTP:

 ftp_close($conn_id);

Résumer

Grâce aux étapes ci-dessus, nous implémentons un script de tâche de synchronisation basé sur PHP qui peut se connecter automatiquement au serveur FTP et télécharger des fichiers quotidiens mis à jour. Ce script peut être exécuté régulièrement tous les jours avec le système de tâches de synchronisation CRON de Linux sans intervention manuelle. Cette méthode convient à une variété de scénarios où les fichiers doivent être mis à jour régulièrement, en particulier lorsqu'ils traitent des fichiers journaux, de la synchronisation des données ou des mises à jour de ressources statiques.