La fonction de la fonction ftp_rawlist est d'obtenir des informations détaillées sur les fichiers du répertoire spécifié. Il est similaire à l'exécution de la commande ls -l dans un terminal Linux. Le résultat renvoyé est un tableau de chaînes, chaque élément représente une ligne de détails de fichier, y compris les autorisations, le propriétaire, la taille, le temps, etc.
$ftp_conn = ftp_connect("gitbox.net");
ftp_login($ftp_conn, "username", "password");
$rawlist = ftp_rawlist($ftp_conn, "/path/to/directory");
Le tableau $ Rawlist obtenu est généralement comme ceci:
-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
Pour obtenir la commande par le temps, la partie dans chaque fichier doit être analysée et convertie en horodatage. Notez que le format de temps renvoyé par FTP_RAWLIST peut varier en fonction du système d'exploitation du serveur, mais dans la plupart des cas, il est similaire au format ci-dessus.
Voici un exemple de fonction qui analyse les horodatages:
function parseFtpRawlistTime($line) {
// Chaînes de ligne divisée par espaces,La plupart des divisions9partie,Empêcher les espaces dans les noms de fichiers
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false; // Le format est faux,Impossible d'analyser
}
// Les informations sur le temps sont généralement dans le6、7、8Peu,Par exemple:May 10 12:30 ou May 10 2024
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
// Obtenez l'année en cours,Comme l'année par défaut
$currentYear = date('Y');
// Déterminez le format de temps est l'heure:Minute ou année
if (strpos($timeOrYear, ':') !== false) {
// Format de temps,Besoin d'épisser l'année en cours
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
// Si le temps dépasse l'heure actuelle(Nouvel An),Ajusté à l'année dernière
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
// C'est le format de l'année,Conversion directe
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
Avec l'horodatage, nous pouvons trier l'intégralité de la liste de fichiers en combinaison avec la fonction USORT de PHP. Les exemples sont les suivants:
// Hypothèses $rawlist Oui ftp_rawlist Le tableau retourné
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
De cette façon, $ Rawlist est trié par ordre croissant de temps. Si vous voulez trier par ordre décroissant, tournez simplement les symboles de comparaison à l'envers.
En combinant la fonction précédente du temps d'analyse, ce qui suit est un exemple d'une liste complète de fichiers FTP triés par le temps:
<?php
$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";
$conn = ftp_connect($ftp_server);
if (!$conn) {
die("Impossible de se connecter à FTP serveur");
}
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
ftp_close($conn);
die("FTP La connexion a échoué");
}
$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;
});
// Liste de fichiers triée de sortie
foreach ($rawlist as $line) {
echo $line . "\n";
}