Position actuelle: Accueil> Derniers articles> Comment extraire la taille et le temps du fichier à partir du résultat de FTP_RAWLIST

Comment extraire la taille et le temps du fichier à partir du résultat de FTP_RAWLIST

gitbox 2025-05-26

Lors du fonctionnement des serveurs distants via le protocole FTP à l'aide de PHP, FTP_RAWLIST () est une fonction commune qui peut renvoyer la sortie similaire à la commande ls -l du système UNIX. Bien que ces sorties brutes fournissent des informations complètes sur la liste des fichiers, comme leur format est une chaîne de texte brut, un traitement supplémentaire est nécessaire pour extraire des informations spécifiques telles que la taille du fichier et le temps de modification de celle-ci.

Cet article présentera comment extraire la taille et le dernier temps de modification de chaque fichier en analysant la sortie de ftp_rawlist () , et il est livré avec un exemple de code.

Comprendre le format de sortie de ftp_rawlist

FTP_RAWLIST () Renvoie un tableau de chaînes, chaque élément représente des informations sur un fichier ou un répertoire, dans le format comme suit:

 -rw-r--r--   1 user group     1048576 May 21 13:37 filename.zip
drwxr-xr-x   2 user group         512 May 20 10:15 subdir

Chaque ligne est une chaîne séparée dans l'espace contenant le type de fichier, les autorisations, le nombre de liens, le propriétaire, le groupe, la taille, la date et l'heure de modification et le nom du fichier.

Parse contenu en utilisant des expressions régulières

Pour extraire la taille du fichier et le temps de modification, vous pouvez analyser ces champs avec des expressions régulières.

 <?php
// connecter FTP
$ftp = ftp_connect("gitbox.net");
ftp_login($ftp, "username", "password");

// Obtenez la liste des répertoires
$rawList = ftp_rawlist($ftp, ".");

// Itérer et analyser chaque ligne
foreach ($rawList as $line) {
    if (preg_match('/^([\-ld])([rwx\-]{9})\s+\d+\s+\S+\s+\S+\s+(\d+)\s+([A-Za-z]{3})\s+(\d{1,2})\s+(\d{2}:\d{2}|\d{4})\s+(.*)$/', $line, $matches)) {
        $type = $matches[1];
        $size = $matches[3];
        $month = $matches[4];
        $day = $matches[5];
        $timeOrYear = $matches[6];
        $name = $matches[7];

        // Convertir le temps modifié en horodatage
        $currentYear = date("Y");
        $fileTimeStr = "$month $day $timeOrYear";

        if (strpos($timeOrYear, ':') !== false) {
            // Cela signifie l&#39;heure de la journée,L&#39;année est l&#39;année en cours
            $fileTimeStr .= " $currentYear";
            $timestamp = strtotime($fileTimeStr);
        } else {
            // Le temps est l&#39;année
            $timestamp = strtotime("$month $day $timeOrYear");
        }

        echo "document: $name\n";
        echo "taper: " . ($type === 'd' ? 'Table des matières' : 'document') . "\n";
        echo "taille: $size octet\n";
        echo "Temps de modification: " . date("Y-m-d H:i:s", $timestamp) . "\n";
        echo "-----------------------------\n";
    }
}
ftp_close($ftp);
?>

Choses à noter

  • Le format de ftp_rawlist () dépend du type de système d'exploitation du serveur distant, et les règles ci-dessus sont ciblées sur les résultats de la liste de style UNIX. Si le serveur utilise Windows FTP, le format de sortie sera complètement différent et doit être ajusté en fonction de la situation réelle.

  • Il est recommandé de toujours effectuer une gestion des erreurs de correspondance régulière pendant le processus d'analyse pour éviter les problèmes causés par des formats incohérents.

  • Pour les serveurs à travers les fuseaux horaires, le résultat de la conversion StrtoTime () peut avoir des erreurs. Il est recommandé d'utiliser la classe DateTime et les objets de fuseau horaire pour traiter le temps plus précisément.

Grâce à la méthode ci-dessus, vous pouvez facilement extraire la taille du fichier et le temps de modification à partir des résultats de ftp_rawlist () et l'utiliser pour la synchronisation des fichiers, l'analyse du journal et d'autres scénarios.