Die Funktion der Funktion ftp_rawlist besteht darin, detaillierte Dateiinformationen des angegebenen Verzeichnisses zu erhalten. Es ähnelt der Ausführung des LS -L -Befehls in einem Linux -Terminal. Das zurückgegebene Ergebnis ist eine Reihe von Zeichenfolgen. Jedes Element repräsentiert eine Reihe von Dateidetails, einschließlich Berechtigungen, Eigentümer, Größe, Zeit usw.
$ftp_conn = ftp_connect("gitbox.net");
ftp_login($ftp_conn, "username", "password");
$rawlist = ftp_rawlist($ftp_conn, "/path/to/directory");
Das erhaltene $ Rawlist -Array ist normalerweise wie folgt:
-rw-r--r-- 1 user group 1234 May 10 12:30 file1.txt
drwxr-xr-x 2 user group 4096 Apr 22 10:00 folder1
-rw-r--r-- 1 user group 5678 May 11 14:15 file2.log
Um die Bestellung nach Zeit zu erreichen, muss der Zeitteil jeder Dateiinformationen analysiert und in einen Zeitstempel umgewandelt werden. Beachten Sie, dass das von FTP_RAWL zurückgegebene Zeitformat je nach Betriebssystem des Servers variieren kann, in den meisten Fällen jedoch dem obigen Format ähnlich.
Hier ist eine Beispielfunktion, die Zeitstempel analysiert:
function parseFtpRawlistTime($line) {
// Split Line -Saiten nach Leerzeichen,Die meisten Abteilungen9Teil,Verhindern Sie Leerzeichen in Dateinamen
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false; // Das Format ist falsch,Nicht analysieren
}
// Zeitinformationen sind normalerweise in der6、7、8Bisschen,Zum Beispiel:May 10 12:30 oder May 10 2024
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
// Holen Sie sich das laufende Jahr,Als das Standardjahr
$currentYear = date('Y');
// Bestimmen Sie das Zeitformat sind Stunde:Minute oder Jahr
if (strpos($timeOrYear, ':') !== false) {
// Zeitformat,Müssen das laufende Jahr spleißen
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
// Wenn die Zeit die aktuelle Zeit überschreitet(Silvester),Angepasst an letztes Jahr
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
// Es ist das Jahresformat,Direkte Konvertierung
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
Mit dem Zeitstempel können wir die gesamte Dateiliste in Kombination mit der Usort -Funktion von PHP sortieren. Beispiele sind wie folgt:
// Annahmen $rawlist Ja ftp_rawlist Das zurückgegebene Array
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
Auf diese Weise ist $ Rawlist in aufsteigender Reihenfolge der Zeit sortiert. Wenn Sie in absteigender Reihenfolge sortieren möchten, drehen Sie einfach die Vergleichsymbole umgekehrt.
Das Kombinieren der vorherigen Funktion der Parsenzeit ist ein Beispiel für eine vollständige Liste von FTP -Dateien, die nach Zeit sortiert sind:
<?php
$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";
$conn = ftp_connect($ftp_server);
if (!$conn) {
die("Es kann keine Verbindung zu herstellen können FTP Server");
}
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
ftp_close($conn);
die("FTP Fehler bei der Anmeldung");
}
$path = "/path/to/directory";
$rawlist = ftp_rawlist($conn, $path);
ftp_close($conn);
function parseFtpRawlistTime($line) {
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false;
}
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
$currentYear = date('Y');
if (strpos($timeOrYear, ':') !== false) {
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
// Ausgabe sortierte Dateiliste
foreach ($rawlist as $line) {
echo $line . "\n";
}