Je veux imprimer la liste des fichiers et uniquement des fichiers à partir d'un serveur FTP, voici ce que je pouvais accomplir. mais cela imprime les noms des fichiers et des dossiers. Comment puis-je simplement imprimer les noms des fichiers (les fichiers peuvent ne pas avoir d'extensions!) P> p>
5 Réponses :
Options:
1) Vous pouvez utiliser où "D" dans la première colonne vous indiquera que c'est un répertoire. Je ne sais pas à quoi il ressemblerait sur un serveur Windows. P> 2) Pour chaque nom de fichier, essayez de vous y retourner. Si vous le pouvez, c'est un répertoire! P> ftp_rawlist code> au lieu de
ftp_nlist code> pour obtenir la liste complète du fichier / répertoire, qui doit indiquer s'il s'agit d'un répertoire. Cependant, le format de cette liste dépendra du système d'exploitation du serveur FTP. Par exemple, sur un système UNIX / Linux, la liste brute peut ressembler à quelque chose comme ceci: p>
@Jacobm: Cela a fonctionné mais a donné l'erreur suivante: (AVERTISSEMENT: FTP_CHDIR () [Fonction.ftp-CHDIR]: /Index.php: Aucun fichier ou répertoire de ce type en C: \ wamp \ www \ contact_keeper \ copeftp.php) Ligne 14 pour chaque fichier qu'il a trouvé ... et pour la structure, il devrait être ftp_chdir ($ ftp_stream, $ répertoire) (le gêné de Dreamweaver)
@ROBERTPITT: Oui, c'est plus lisible et convient mieux aux besoins de l'OP. Je voulais juste faire mon exemple court!
@ROBERTPITT: J'ai juste besoin des fichiers dans un dossier spécifique.
@Jacobm: J'ai résolu l'erreur en ajoutant ERROR_REPORTING (0); au début du fichier.
@SIKAS: Si l'avertissement est un problème, vous pouvez modifier ftp_chdir code> vers
@ftp_chdir code> pour supprimer l'avertissement, mais être conscient qui supprimera également des erreurs légitimes (par exemple, la réseau a diminué).
Désolé, mais je pense avoir une meilleure solution car mon chemin ne nécessite pas de changer de répertoire
Voici un script qui le fera pour vous, avec courtoisie d'une affiche sur FTP_NLIST (PHP DOCS) :
<?php //identify directories function ftp_is_dir($dir) { global $ftp_connect; if (@ftp_chdir($ftp_connect, $dir)) { ftp_chdir($ftp_connect, '..'); return true; } else { return false; } } $ftp_nlist = ftp_nlist($ftp_connect, "."); //alphabetical sorting sort($ftp_nlist); foreach ($ftp_nlist as $v) { //1. ftp_is_dir() is true => directory if (ftp_is_dir($v)) { //output as [ directory ] echo "[ " . $v . " ]<br />\n"; } } foreach ($ftp_nlist as $v) { //2. ftp_is_dir() is false => file if (!ftp_is_dir($v)) { //output as file echo "" . $v . "<br />\n"; } } ?>
Cela a fonctionné pour moi mais je vous recommanderais de faire taire le ftp_chdir avec @ftp_chdir dans la fonction de la fonction si, car il craignait des avertissements lors de la tentative de saisie de fichiers.
Votre code ne fonctionne pas pour moi. La fonction renvoie toujours de faux. Il pense que tous sont des fichiers non pas répertoire !!!
Si vous utilisez le FTP_Rawlist, comme:
$rawfiles = ftp_rawlist($conn, true); //true being for recursive foreach ($rawfiles as $rawfile) { $info = preg_split("/[\s]+/", $rawfile, 9); if($info[0]{0} == 'd') { //Directory }else { //File $size = byteconvert($info[4]); $chmod = chmodnum($info[0]); $date = strtotime($info[6] . ' ' . $info[5] . ' ' . $info[7]); } }
Cela ne fonctionnera pas si le serveur FTP est une machine Windows (et n'a pas été configuré pour utiliser le formatage UNIX, qui peut être effectué). Dans ce cas, vous devez rechercher le
Vous pouvez également utiliser la fonction ftp_mdtm () code>. Cela renvoie toujours une erreur (-1) lorsqu'elle échoue, ce qui indiquerait un répertoire car cette fonction ne fonctionne pas pour les répertoires. La seule mise en garde est que cela ne fonctionne pas sur certains systèmes (le manuel n'indique pas lesquels), de sorte que vous auriez besoin de tester si cela fonctionnait en premier. P>
Si vous êtes dans le même serveur, vous pouvez faire: pour le serveur distant, vous pouvez vérifier si le fichier existe sur avec d'autres méthodes . P> p>