Dans le développement de PHP, en particulier en ce qui concerne les tâches qui automatisent la gestion des fichiers ou l'interaction du serveur distant, ftp_rawlist () est une fonction très utile. Il permet aux développeurs d'obtenir les informations de liste d'origine des répertoires via le protocole FTP, qui est très critique pour le traitement à grain fin des fichiers sur les serveurs FTP. Cet article explorera les compétences approfondies de l'utilisation de la fonction ftp_rawlist () et combinera des cas pratiques pour montrer son application dans des scripts de ligne de commande.
ftp_rawlist () est l'une des fonctions fournies par l'extension FTP PHP, et le prototype est le suivant:
array ftp_rawlist ( FTP\Connection $ftp_stream , string $directory [, bool $recursive = false ] )
Cette fonction renvoie les informations détaillées de tous les fichiers et sous-répertoires dans le répertoire spécifié, et le format est généralement le même que la commande ls -l . Cela signifie que vous pouvez extraire les autorisations, la taille du fichier, le temps de modification, le nom de fichier et d'autres informations à partir de la chaîne retournée.
Dans les scripts CLI (Command Line Interface), le rôle de ftp_rawlist () est particulièrement évident, et les principales raisons comprennent:
Traiter automatiquement la structure du répertoire distant sans interaction GUI
Convient aux tâches périodiques telles que la vérification du répertoire FTP via Cron chronométré
Prend en charge la structure du répertoire d'analyse logique personnalisée
<?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; // Ignorer le répertoire
}
$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);
Ce script se connectera au serveur FTP sur ftp.gitbox.net , obtiendra tous les fichiers dans le répertoire / public_html / des fichiers et filtrez les noms de fichiers modifiés au cours des 7 derniers jours.
Le support récursif n'est pas une caractéristique intégrée de ftp_rawlist () , mais nous pouvons l'implémenter nous-mêmes via des fonctions récursives:
<?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);
Ce script peut obtenir de manière récursive tous les chemins de fichier et les télécharger à partir du répertoire / public_html / téléchargements de ftp.gitbox.net vers le répertoire local, en maintenant la structure du répertoire d'origine.
Le format d'analyse n'est pas fixe : les formats de liste renvoyés par différents serveurs FTP peuvent différer légèrement, et une logique régulière ou divisée flexible doit être utilisée lors de l'analyse.
Connexion et délai d'expiration : il est recommandé de définir un délai d'expiration raisonnable et de réessayer la logique pour empêcher les scripts de rester coincés.
Vérification de l'autorisation : assurez-vous que le compte FTP a la permission de lire les répertoires et les fichiers.
Bien que la fonction ftp_rawlist () sortit la chaîne d'origine, via l'analyse et la combinaison logiques appropriés, il est possible de créer un puissant outil de ligne de commande pour la surveillance, la sauvegarde et la gestion automatisée des répertoires FTP. Que ce soit dans les scripts quotidiens de fonctionnement et de maintenance ou d'automatisation, il s'agit d'un puissant outil qui mérite d'être master.