Aktueller Standort: Startseite> Neueste Artikel> So extrahieren Sie die Größe und Zeit der Datei aus dem Ergebnis von FTP_RAWLIST

So extrahieren Sie die Größe und Zeit der Datei aus dem Ergebnis von FTP_RAWLIST

gitbox 2025-05-26

Beim Betrieb von Remote -Servern über das FTP -Protokoll mit PHP ist FTP_RAWLIST () eine häufige Funktion, die die Ausgabe ähnlich wie der Befehl ls -l des UNIX -Systems zurückgeben kann. Obwohl diese Rohausgänge vollständige Dateilisteninformationen liefern, ist eine zusätzliche Verarbeitung erforderlich, da es sich bei ihrem Format um eine einfache Textzeichenfolge handelt, eine zusätzliche Verarbeitung erforderlich ist, um bestimmte Informationen wie die Größe der Datei und die Änderungszeit aus der IT zu extrahieren.

In diesem Artikel wird vorgestellt, wie die Größe und die letzte Änderungszeit jeder Datei extrahiert werden, indem die Ausgabe von FTP_RAWLIST () analysiert wird, und er wird mit Beispielcode geliefert.

Verstehen Sie das Ausgangsformat von ftp_rawlist

ftp_rawlist () gibt ein Array von Zeichenfolgen zurück. Jedes Element enthält Informationen zu einer Datei oder einem Verzeichnis im Format wie folgt:

 -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

Jede Zeile ist eine speicher getrennte Zeichenfolge, die den Dateityp, die Berechtigungen, die Anzahl der Links, den Eigentümer, die Gruppe, die Größe, das Datum und die Uhrzeit der Änderung und den Dateinamen enthält.

Inhalt mit regulären Ausdrücken analysieren

Um die Größe und Änderungszeit von Dateien zu extrahieren, können Sie diese Felder mit regulären Ausdrücken analysieren.

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

// Holen Sie sich die Verzeichnisliste
$rawList = ftp_rawlist($ftp, ".");

// Wiederholen und jede Linie analysieren
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];

        // Umwandeln Sie die modifizierte Zeit in den Zeitstempel
        $currentYear = date("Y");
        $fileTimeStr = "$month $day $timeOrYear";

        if (strpos($timeOrYear, ':') !== false) {
            // Es bedeutet die Tageszeit,Das Jahr ist das laufende Jahr
            $fileTimeStr .= " $currentYear";
            $timestamp = strtotime($fileTimeStr);
        } else {
            // Zeit ist Jahr
            $timestamp = strtotime("$month $day $timeOrYear");
        }

        echo "dokumentieren: $name\n";
        echo "Typ: " . ($type === 'd' ? 'Inhaltsverzeichnis' : 'dokumentieren') . "\n";
        echo "Größe: $size Byte\n";
        echo "Änderungszeit: " . date("Y-m-d H:i:s", $timestamp) . "\n";
        echo "-----------------------------\n";
    }
}
ftp_close($ftp);
?>

Dinge zu beachten

  • Das Format von FTP_RAWLIST () hängt vom Betriebssystemtyp des Remote-Servers ab, und die oben genannten Regeln richten sich an die Listenergebnisse im Unix-Stil. Wenn der Server Windows FTP verwendet, unterscheidet sich das Ausgabeformat völlig unterschiedlich und muss entsprechend der tatsächlichen Situation angepasst werden.

  • Es wird empfohlen, während des Parsingprozesses immer eine regelmäßige Übereinstimmungsfehlerbehandlung durchzuführen, um Probleme zu verhindern, die durch inkonsistente Formate verursacht werden.

  • Für Server in Zeitzonen kann das Ergebnis der Strtotime () -Enwendung Fehler aufweisen. Es wird empfohlen, die DateTime -Klasse- und Zeitzonenobjekte zu verwenden, um die Zeit genauer zu verarbeiten.

Mit der obigen Methode können Sie die Dateigröße und Änderungszeit aus den Ergebnissen von ftp_rawlist () problemlos extrahieren und für die Dateisynchronisation, die Protokollanalyse und andere Szenarien verwenden.