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.
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.
In den Skripten CLI (Befehlszeilenschnittstellen) ist die Rolle von FTP_RAWLIST () besonders offensichtlich, und die Hauptgründe umfassen:
Verarbeiten Sie die Remote -Verzeichnisstruktur automatisch ohne GUI -Interaktion
Geeignet für regelmäßige Aufgaben wie die Überprüfung des FTP -Verzeichnisses über den zeitgesteuerten Cron
Unterstützt die kundenspezifische Struktur des logischen Parsing -Verzeichnisses
<?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.
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.
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.
Verbindung und Zeitüberschreitung : Es wird empfohlen, angemessene Zeitüberschreitungs- und Logik festzulegen, um zu verhindern, dass Skripte stecken bleiben.
Berechtigungsprüfung : Stellen Sie sicher, dass das FTP -Konto die Berechtigung zum Lesen von Verzeichnissen und Dateien hat.
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.