10
votes

Obtenir la liste des fichiers sur FTP

Je veux imprimer la liste des fichiers et uniquement des fichiers à partir d'un serveur FTP, voici ce que je pouvais accomplir. xxx

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!)


0 commentaires

5 Réponses :


10
votes

Options:

1) Vous pouvez utiliser ftp_rawlist au lieu de ftp_nlist 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: xxx

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.

2) Pour chaque nom de fichier, essayez de vous y retourner. Si vous le pouvez, c'est un répertoire! xxx


6 commentaires

@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 vers @ftp_chdir 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



4
votes

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";
  }
}
?>


2 commentaires

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 !!!



1
votes

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]);
    }
}


1 commentaires

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

dans la liste.



1
votes

Vous pouvez également utiliser la fonction ftp_mdtm () . 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.


0 commentaires

1
votes

Si vous êtes dans le même serveur, vous pouvez faire: xxx

pour le serveur distant, vous pouvez vérifier si le fichier existe sur avec d'autres méthodes .


0 commentaires