Tout d'abord, nous nous connectons au serveur FTP via FTP_Connect et FTP_Login . Utilisez ensuite FTP_RAWLIST pour obtenir la liste de fichiers d'origine du répertoire distant.
<?php
$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";
// connecter FTP
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) {
die("无法connecter到 FTP serveur");
}
// Se connecter
if (!ftp_login($conn_id, $ftp_user, $ftp_pass)) {
ftp_close($conn_id);
die("FTP Se connecter失败");
}
// Passez au répertoire cible
$remote_dir = "/files";
ftp_chdir($conn_id, $remote_dir);
// Obtenez la liste des fichiers d'origine
$raw_list = ftp_rawlist($conn_id, ".");
ftp_close($conn_id);
À ce stade, $ raw_list est un tableau de chaînes, chaque élément est une ligne de sortie similaire à Unix ls -l . Par exemple:
-rw-r--r-- 1 user group 1024 Jan 01 12:00 file1.txt
drwxr-xr-x 2 user group 4096 Jan 01 12:01 folder1
Ensuite, nous utilisons Array_Map pour traiter la liste et analyser chaque ligne en données structurées pour des opérations ultérieures plus faciles:
$parsed_list = array_map(function($item) {
$chunks = preg_split("/\s+/", $item, 9);
return [
'permissions' => $chunks[0],
'number' => $chunks[1],
'owner' => $chunks[2],
'group' => $chunks[3],
'size' => $chunks[4],
'month' => $chunks[5],
'day' => $chunks[6],
'timeOrYear' => $chunks[7],
'name' => $chunks[8],
'type' => substr($chunks[0], 0, 1) === 'd' ? 'directory' : 'file'
];
}, $raw_list);
print_r($parsed_list);
Vous avez maintenant converti la liste de fichiers d'origine renvoyée par FTP dans un tableau structuré. Vous pouvez en outre utiliser Array_Filter pour filtrer des types de fichiers spécifiques, tels que simplement obtenir des fichiers au lieu des répertoires:
$only_files = array_filter($parsed_list, function($item) {
return $item['type'] === 'file';
});
print_r($only_files);
Vous pouvez également traiter les données à nouveau en combinaison avec array_map , comme la génération d'un lien de téléchargement pour chaque fichier:
$download_links = array_map(function($item) {
return [
'name' => $item['name'],
'link' => "ftp://gitbox.net/files/" . urlencode($item['name'])
];
}, $only_files);
print_r($download_links);
De cette manière, combinée avec FTP_RAWLIST et Array_Map , vous pouvez traiter de manière flexible les listes de fichiers FTP pour implémenter le filtrage, la structure, la génération de liens par lots et d'autres opérations. Cette méthode est non seulement efficace, mais a également une bonne maintenabilité et une bonne évolutivité. Cette solution est fortement recommandée pour les scénarios d'application qui nécessitent la gestion d'un grand nombre de fichiers FTP.