Aktueller Standort: Startseite> Neueste Artikel> Tipps zum Anwenden von FTP_RAWLIST in CLI -Skripten

Tipps zum Anwenden von FTP_RAWLIST in CLI -Skripten

gitbox 2025-05-26

In der PHP -Entwicklung ist FTP_RAWLIST () eine sehr nützliche Funktion. Es ermöglicht Entwicklern, die ursprünglichen Listeninformationen von Verzeichnissen über das FTP-Protokoll zu erhalten, was für die feinkörnige Verarbeitung von Dateien auf FTP-Servern sehr wichtig ist. In diesem Artikel werden ausführliche Fähigkeiten der Verwendung der Funktion ftp_rawlist () untersucht und praktische Fälle kombiniert, um seine Anwendung in Befehlszeilenskripten anzuzeigen.

1. Funktion Einführung

ftp_rawlist () ist eine der Funktionen der PHP -FTP -Erweiterung, und der Prototyp ist wie folgt:

 array ftp_rawlist ( FTP\Connection $ftp_stream , string $directory [, bool $recursive = false ] )

Diese Funktion gibt die detaillierten Informationen aller Dateien und Unterverzeichnisse im angegebenen Verzeichnis zurück, und das Format entspricht normalerweise dem Befehl ls -l . Dies bedeutet, dass Sie Berechtigungen, Dateigröße, Änderungszeit, Dateinamen und andere Informationen aus der zurückgegebenen Zeichenfolge extrahieren können.

2. Gründe, die für die Verwendung in Befehlszeilenskripten geeignet sind

In den Skripten CLI (Befehlszeilenschnittstellen) ist die Rolle von FTP_RAWLIST () besonders offensichtlich, und die Hauptgründe umfassen:

  1. Verarbeiten Sie die Remote -Verzeichnisstruktur automatisch ohne GUI -Interaktion

  2. Geeignet für regelmäßige Aufgaben wie die Überprüfung des FTP -Verzeichnisses über den zeitgesteuerten Cron

  3. Unterstützt die kundenspezifische Struktur des logischen Parsing -Verzeichnisses

3. Praktischer Fall 1: Listen Sie Dateien in einem bestimmten Verzeichnis auf und filtern Sie die in den letzten 7 Tagen geänderten Dateien heraus, die geändert wurden

 <?php

$ftp = ftp_connect('ftp.gitbox.net');
ftp_login($ftp, 'username', 'password');

$rawList = ftp_rawlist($ftp, '/public_html/files');

$recentFiles = [];
$now = time();

foreach ($rawList as $line) {
    $parts = preg_split("/\s+/", $line, 9);
    if (count($parts) < 9 || $parts[0][0] === 'd') {
        continue; // Ignorieren Sie das Verzeichnis
    }

    $month = $parts[5];
    $day = $parts[6];
    $timeOrYear = $parts[7];
    $filename = $parts[8];

    $filetime = strtotime("$month $day $timeOrYear");
    if ($filetime !== false && ($now - $filetime) <= 7 * 24 * 60 * 60) {
        $recentFiles[] = $filename;
    }
}

print_r($recentFiles);

ftp_close($ftp);

Dieses Skript verbindet eine Verbindung zum FTP -Server auf ftp.gitbox.net , erhalten Sie alle Dateien im Verzeichnis /public_html /files und filtern Sie die in den letzten 7 Tagen geänderten Dateinamen heraus.

4. Praktischer Fall 2: Listen Sie rekursiv alle Dateien auf und laden Sie sie in die Region herunter

Rekursive Unterstützung ist keine integrierte Funktion von FTP_RAWLIST () , aber wir können sie selbst durch rekursive Funktionen implementieren:

 <?php

function listAllFiles($ftp, $dir = '.', $base = '') {
    $files = [];

    $list = ftp_rawlist($ftp, $dir);

    foreach ($list as $item) {
        $info = preg_split("/\s+/", $item, 9);
        $name = $info[8];
        $fullPath = "$dir/$name";

        if ($info[0][0] === 'd') {
            $files = array_merge($files, listAllFiles($ftp, $fullPath, "$base$name/"));
        } else {
            $files[] = "$base$name";
        }
    }

    return $files;
}

$ftp = ftp_connect('ftp.gitbox.net');
ftp_login($ftp, 'username', 'password');

$allFiles = listAllFiles($ftp, '/public_html/downloads/');

foreach ($allFiles as $file) {
    $local = __DIR__ . '/downloads/' . $file;
    if (!is_dir(dirname($local))) {
        mkdir(dirname($local), 0777, true);
    }
    ftp_get($ftp, $local, '/public_html/downloads/' . $file, FTP_BINARY);
    echo "Downloaded: $file\n";
}

ftp_close($ftp);

Dieses Skript kann rekursiv alle Dateipfade erhalten und sie aus dem /public_html/downloads/ verzeichnis von ftp.gitbox.net in das lokale Verzeichnis herunterladen, wobei die ursprüngliche Verzeichnisstruktur beibehalten wird.

5. Vorsichtsmaßnahmen für das Debuggen und Codieren

  1. Das Parsing -Format ist nicht festgelegt : Die von verschiedenen FTP -Servern zurückgegebenen Listenformaten können sich leicht unterscheiden, und beim Parsen sollte eine flexible reguläre oder geteilte Logik verwendet werden.

  2. Verbindung und Zeitüberschreitung : Es wird empfohlen, angemessene Zeitüberschreitungs- und Logik festzulegen, um zu verhindern, dass Skripte stecken bleiben.

  3. Berechtigungsprüfung : Stellen Sie sicher, dass das FTP -Konto die Berechtigung zum Lesen von Verzeichnissen und Dateien hat.

6. Zusammenfassung

Obwohl die Funktion ftp_rawlist () die ursprüngliche Zeichenfolge durch geeignete Parsen und logische Kombination ausgibt, ist es möglich, ein leistungsstarkes Befehlszeilen -Tool zur Überwachung, Sicherung und automatisierter Verwaltung von FTP -Verzeichnissen zu erstellen. Ob in täglichen Betrieb und Wartungs- oder Automatisierungsskripten, es ist ein leistungsstarkes Tool, das es wert ist, gemeistert zu werden.