Binni: FTP: Datei oder Verzeichnis???

n'Abend alle zusammen,

wie kann ich mittels PHP herausbekommen, wenn ich eine Dateiliste mit der Funktion ftp_nlist habe, od das jeweilige Element ein Verzeichnis oder eine Datei ist?

Danke schonmal vorab und schöne Ostern!

Viele Grüße - der Binni

--
www.GTR-Home.de
  1. Hi Binni,

    wie kann ich mittels PHP herausbekommen, wenn ich eine Dateiliste mit der Funktion ftp_nlist habe, od das jeweilige Element ein Verzeichnis oder eine Datei ist?

    Schau doch einfach mal ins PHP-Manual bei der Funktion ftp_nlist(), da steht in den Userkommentaren eine Funktion is_ftp_dir(), hast du die schon mal ausprobiert?

    Ansonsten könntest du versuchen per ftp_chdir() in das "Verzeichnis" zu wechseln, klappt dies, so ist es ein Verzeichnis, klappt dies nicht, so fehlen dir entweder die Berechtigungen in das Verzeichnis zu wechseln (und dann kannst du eh nichts mit dem Verzeichnis machen) oder es ist eben gar kein Verzeichnis.

    MfG, Dennis.

    1. Hi Dennis,

      Hi Binni,

      wie kann ich mittels PHP herausbekommen, wenn ich eine Dateiliste mit der Funktion ftp_nlist habe, od das jeweilige Element ein Verzeichnis oder eine Datei ist?

      Schau doch einfach mal ins PHP-Manual bei der Funktion ftp_nlist(), da steht in den Userkommentaren eine Funktion is_ftp_dir(), hast du die schon mal ausprobiert?

      Ansonsten könntest du versuchen per ftp_chdir() in das "Verzeichnis" zu wechseln, klappt dies, so ist es ein Verzeichnis, klappt dies nicht, so fehlen dir entweder die Berechtigungen in das Verzeichnis zu wechseln (und dann kannst du eh nichts mit dem Verzeichnis machen) oder es ist eben gar kein Verzeichnis.

      MfG, Dennis.

      MfG, Dennis.

    2. Hello,

      Schau doch einfach mal ins PHP-Manual bei der Funktion ftp_nlist(), da steht in den Userkommentaren eine Funktion is_ftp_dir(), hast du die schon mal ausprobiert?

      meinst Du:
      dreamsavior at gmail dot com
      30-Jun-2005 06:19

      Wenn ich das richtig sehe, produziert die Funktion jedenfalls lost Handles, wenn es sich um ein Verzeichnis handelt und liefert kein definiertes Ergebnis, wenn es keins ist.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hallo,

        Wenn ich das richtig sehe, produziert die Funktion jedenfalls lost Handles, wenn es sich um ein Verzeichnis handelt und liefert kein definiertes Ergebnis, wenn es keins ist.

        ja, es funktioniert nicht richtig - ich habe es jetzt mal ausprobiert!
         hier nochmal der Code des interessanten Teils:

        $contents = ftp_nlist($conn_id, $pfad);

        if (!empty($contents[0])) {
               $check = str_replace($pfad, "", $contents[0]);
               if (!empty($check)) {
                   return true;
               }

        so, wenn wir nun mal annehmen, dass statt dem return da zum Beispiel eine echo "Verzeichnis"; stehen würde und das ganze nun mal ausprobieren, stellen wir fest das ein leeres Verzeichnis jedenfalls nicht als Verzeichnis erkannt wird

        also, das funktoniert nun nicht!

        der andere Vorschlag von dennis, einfach zu schauen, ob man mit php in das eventuelle verzeichnis wechseln kann, ist auch nicht das wahre, weil wenn ich keine rechte für das verzeichnis hab komm ich nicht rein und bekomme FALSE genauso, wie wenn ich versuche in ne datei zu wechseln - d.h. so kann man auchnicht feststellen, obs nun ne datei oder ein verzeichnis ist!

        gibts weitere Vorschläge / Ideen, wie man rausbekommen kann, ob das jeweilige Element ein Verzeichnis oder ne Datei auf dem FTP-Server ist?

        Danke und schöne Ostern

        Viele Grüße - der Binni

        --
        www.GTR-Home.de
        1. Hello,

          gibts weitere Vorschläge / Ideen, wie man rausbekommen kann, ob das jeweilige Element ein Verzeichnis oder ne Datei auf dem FTP-Server ist?

          Die sind angesichts des Befehlsvorrates von PHPs ftp-Funktionen auch nicht viel besser.
          Du könntest ftp_exec() bemühen mit einem 'ls -la' und Dir die Liste zu beschaffen.

          Wenn Du aber kein exec() aufrufen darfst, sieht es schon wieder schlecht aus.

          Da normale FTP-Clients das aber auch irgendwie rausbekommen, muss es eine (vielleicht vergessene) Funktion geben.

          Und dann wäre eine Alternative ggf http://de3.php.net/manual/de/function.ftp-rawlist.php
          Wenn das das Äquvalent zu "dir" ist, hättest Du gewonnen:

          Ftp> dir
          200 Port command successful
          150 Opening data channel for directory list.
          drwxr-xr-x 1 ftp ftp              0 May 11  2002 RECYCLED
          drwxr-xr-x 1 ftp ftp              0 Oct 15  2002 TECHNIK
          drwxr-xr-x 1 ftp ftp              0 May 10  2002 DATEN
          drwxr-xr-x 1 ftp ftp              0 May 10  2002 USER
          drwxr-xr-x 1 ftp ftp              0 May 10  2002 GRAFIK
          drwxr-xr-x 1 ftp ftp              0 May 11  2002 TSPRIVAT
          drwxr-xr-x 1 ftp ftp              0 Nov 28  2002 ~MSSETUP.T
          drwxr-xr-x 1 ftp ftp              0 Jan 14  2004 JAEGER
          drwxr-xr-x 1 ftp ftp              0 May 12  2002 WebServer
          drwxr-xr-x 1 ftp ftp              0 Oct 16  2002 C-Daten
          drwxr-xr-x 1 ftp ftp              0 Dec 15  2003 programme
          drwxr-xr-x 1 ftp ftp              0 Mar 23 05:22 FTP-UPLOAD
          226 Transfer OK
          Ftp: 701 Bytes empfangen in 0.11Sekunden 6.37KB/Sek.

          Ich greife mit dem FTP-Client auf einer WinDOSe auf meinen FTP-Server, der ebenfalls auf einer (anderen) WinDOSE läuft, zu. Deine Chancen sind daher gar nicht schlecht.

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

          1. Hello,

            'mal eben schnell' scheint sich das nicht lösen zu lassen.

            <?php   ### ftp_get_dir.php ###

            ($ftp_svr = ftp_connect ( '192.168.101.25', 21 )) or die('keine FTP-Server-Verbindung');

            $login =  ftp_login ( $ftp_svr, '********', '***********' );

            if($login)
              {
                 $_dir = ftp_raw ( $ftp_svr, "dir" );

            echo "<pre>\n";
                 print_r($_dir);
                 echo "</pre>\n";
              }

            ftp_close($ftp_svr);

            ?>

            Das liefert bei mir leider nur

            Array
            (
                [0] => 500 Syntax error, command unrecognized.
            )

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hello,

              wenn ich das Kommando 'help' absetze mit dem Script, kommt dies:

              Array
              (
                  [0] => 214-The following commands are recognized:
                  [1] =>    USER   PASS   QUIT   CWD    PWD    PORT   PASV   TYPE
                  [2] =>    LIST   REST   CDUP   RETR   STOR   SIZE   DELE   RMD
                  [3] =>    MKD    RNFR   RNTO   ABOR   SYST   NOOP   APPE   NLST
                  [4] =>    MDTM   XPWD   XCUP   XMKD   XRMD   NOP    EPSV   EPRT
                  [5] =>    AUTH   ADAT   PBSZ   PROT   FEAT   MODE   OPTS   HELP
                  [6] =>    ALLO   MLST   MLSD   SITE   P@SW
                  [7] => 214 Have a nice day.
              )

              und ein anschließendes 'list' liefert nur

              Array
              (
                  [0] => 503 Bad sequence of commands.
              )

              Da scheine irgendwas noch nicht verstanden zu haben :-(

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau

              1. Hello,

                [0] => 214-The following commands are recognized:
                    [1] =>    USER   PASS   QUIT   CWD    PWD    PORT   PASV   TYPE
                    [2] =>    LIST   REST   CDUP   RETR   STOR   SIZE   DELE   RMD
                    [3] =>    MKD    RNFR   RNTO   ABOR   SYST   NOOP   APPE   NLST
                    [4] =>    MDTM   XPWD   XCUP   XMKD   XRMD   NOP    EPSV   EPRT
                    [5] =>    AUTH   ADAT   PBSZ   PROT   FEAT   MODE   OPTS   HELP
                    [6] =>    ALLO   MLST   MLSD   SITE   P@SW
                    [7] => 214 Have a nice day.

                einige Kommandos aus der Liste funktionieren aber zufriedenstellend:

                • cwd
                • cdup
                • mkd
                • help
                • allo
                • mlst

                Ich gewinne so nach und nach den Eindruck, dass php die anderen Kommados nicht kennt, und daher nicht weiterleitet. Aber sowohl mein Linux-FTP-Client als auch mein DOSen-FTP-Client in der WinDOS98SE-Command-Box können mit ihren Kommandos auf den FTP-Server (Filezilla auf ner anderen WinDOSe) einwirken.

                Mittels PHP habe ich die Kommados von einem XAMPP auf WinDOSe absetzen lassen.

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. Hallo,

                  wie sieht die Ausgabe von ftp_rawlist() auf den verschiednenen Systemen aus?

                  also, die Ausgabe unter 'nem UNIX-System habe ich, wie sieht 'ne Zeile unter den anderen Systemen (Win, Mac, [was sonst noch?]) aus?

                  wenn die Ausgaben am Anfang alle entweder wie bei der UNIX-Ausgabe ein "d" oder ein "-" je nachdem, ob's n' Verzeichnis oder 'ne Datei ist, dann wäre es ja eine Option, das ganze über ftp_rawlist() + entsprechende Abfrage zu lösen

                  Viele Grüße - der Binni

                  --
                  www.GTR-Home.de
                  1. Hello,

                    wie sieht die Ausgabe von ftp_rawlist() auf den verschiednenen Systemen aus?

                    Array
                    (
                        [0] => drwxr-xr-x 1 ftp ftp              0 May 11  2002 RECYCLED
                        [1] => drwxr-xr-x 1 ftp ftp              0 Oct 15  2002 TECHNIK
                        [2] => drwxr-xr-x 1 ftp ftp              0 May 10  2002 DATEN
                        [3] => drwxr-xr-x 1 ftp ftp              0 May 10  2002 USER
                        [4] => drwxr-xr-x 1 ftp ftp              0 May 10  2002 GRAFIK
                        [5] => drwxr-xr-x 1 ftp ftp              0 May 11  2002 TSPRIVAT
                        [6] => drwxr-xr-x 1 ftp ftp              0 Nov 28  2002 ~MSSETUP.T
                        [7] => drwxr-xr-x 1 ftp ftp              0 Jan 14  2004 JAEGER
                        [8] => drwxr-xr-x 1 ftp ftp              0 May 12  2002 WebServer
                        [9] => drwxr-xr-x 1 ftp ftp              0 Oct 16  2002 C-Daten
                        [10] => drwxr-xr-x 1 ftp ftp              0 Dec 15  2003 programme
                        [11] => drwxr-xr-x 1 ftp ftp              0 Mar 23 05:22 FTP-UPLOAD
                    )

                    Diese Ausgabe stammt von einem Filezilla FTP-Server auf einem WinDOS98SE-System

                    Es gibt wohl unterschiede, wenn man das Ganze auf Win 2000 oder Win NT laufen lässt. Die habe ich aber nicht zum Testen zur Verfügung.

                    Harzliche Grüße vom Berg
                    http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau

                    1. Hallo,

                      Diese Ausgabe stammt von einem Filezilla FTP-Server auf einem WinDOS98SE-System

                      dankeschön!

                      Es gibt wohl unterschiede, wenn man das Ganze auf Win 2000 oder Win NT laufen lässt. Die habe ich aber nicht zum Testen zur Verfügung.

                      gibts noch anndere Helfwillige, mit noch fehlenden Systemen (Win 2000, Win NT, Mac) - dann postet bitte doch auchnoch die Ausgaben!

                      WinXP, Win98SE, UNIX ist schon vorhanden!

                      Viele Grüße - der Binni

                      --
                      www.GTR-Home.de
                      1. Hello,

                        gibts noch anndere Helfwillige, mit noch fehlenden Systemen (Win 2000, Win NT, Mac) - dann postet bitte doch auchnoch die Ausgaben!

                        WinXP, Win98SE, UNIX ist schon vorhanden!

                        Da kommt wohl nix mehr :-((

                        Harzliche Grüße vom Berg
                        http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau

                        1. 'n abend

                          gibts noch anndere Helfwillige, mit noch fehlenden Systemen (Win 2000, Win NT, Mac) - dann postet bitte doch auchnoch die Ausgaben!

                          WinXP, Win98SE, UNIX ist schon vorhanden!

                          Da kommt wohl nix mehr :-((

                          einen ham wer noch: Ausgabe non Mac ist UNIX-like

                          ansonsten: :-((

                          Viele Grüße - der Binni

                          --
                          www.GTR-Home.de
                          1. Hello,

                            WinXP, Win98SE, UNIX ist schon vorhanden!

                            Da kommt wohl nix mehr :-((

                            einen ham wer noch: Ausgabe non Mac ist UNIX-like

                            Ich habe da morgen ggf. nochmal einen Win2000-Server zur Verfügung.
                            Die eigentliche Ausgabe hängt ja von der Definition des FTP-Protokolls ab, sollte also für alle System weitestgehnd gleich sein. bei manchen Systemen kann man dann aber vielleicht die Rechtrestrukturen nicht in die des FTP-Protokolls abbilden. Das sind die für uns hier interessanten Fälle.

                            Harzliche Grüße vom Berg
                            http://www.annerschbarrich.de

                            Tom

                            --
                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                            Nur selber lernen macht schlau

                            1. Hallo,

                              Ich habe da morgen ggf. nochmal einen Win2000-Server zur Verfügung.

                              das ist schön *freu*

                              Die eigentliche Ausgabe hängt ja von der Definition des FTP-Protokolls ab,

                              ja, z.B. daran erkennbar, das beim Filezilla-Server die ftp_systype() immer ein UNIX ergibt, da FileZilla als UNIX-Server antworten soll - eigentlich ne prima sache, wenns nun alle so machen würden ;-)

                              Viele Grüße - der Binni

                              --
                              www.GTR-Home.de
                              1. Hello,

                                Ich habe da morgen ggf. nochmal einen Win2000-Server zur Verfügung.
                                das ist schön *freu*

                                ist je nach FTP-Server einstellbar, ob Ausgabeformat UNIX oder DOS kommt.
                                Bei DOS hast Du dann z.B. diese Darstellung im Browser

                                Array
                                (
                                    [0] => 04-03-06  11:47AM                  152 ausgabe.php
                                    [1] => 04-19-06  11:56AM                 cgi-bin
                                    [2] => 12-29-05  01:32PM                 Eigene Musik
                                    [3] => 03-01-06  11:24AM                 Firma
                                    [4] => 04-13-06  09:55AM                 Firma_Matze
                                    [5] => 12-16-05  02:22PM                19968 i.doc
                                    [6] => 04-18-06  05:48PM                 3340 kundedarf.htm
                                    [7] => 03-21-06  10:32AM               279511 laden.jpg
                                    [8] => 03-30-06  04:53PM                 Matze
                                    [9] => 04-18-06  04:16PM                 Matze_Privat
                                    [10] => 10-14-04  12:49PM              6539742 MEDION-Navigator.cab
                                    [11] => 04-11-06  04:55PM              1073882 nsvtools-setup.exe
                                    [12] => 04-18-06  09:45AM                 Technik
                                    [13] => 04-11-06  06:47PM                  762 test.html
                                )

                                Quelltext davon:

                                <pre>
                                Array
                                (
                                    [0] => 04-03-06  11:47AM                  152 ausgabe.php
                                    [1] => 04-19-06  11:56AM       <DIR>          cgi-bin
                                    [2] => 12-29-05  01:32PM       <DIR>          Eigene Musik
                                    [3] => 03-01-06  11:24AM       <DIR>          Firma
                                    [4] => 04-13-06  09:55AM       <DIR>          Firma_Matze
                                    [5] => 12-16-05  02:22PM                19968 i.doc
                                    [6] => 04-18-06  05:48PM                 3340 kundedarf.htm
                                    [7] => 03-21-06  10:32AM               279511 laden.jpg
                                    [8] => 03-30-06  04:53PM       <DIR>          Matze
                                    [9] => 04-18-06  04:16PM       <DIR>          Matze_Privat
                                    [10] => 10-14-04  12:49PM              6539742 MEDION-Navigator.cab
                                    [11] => 04-11-06  04:55PM              1073882 nsvtools-setup.exe
                                    [12] => 04-18-06  09:45AM       <DIR>          Technik
                                    [13] => 04-11-06  06:47PM                  762 test.html
                                )
                                </pre>

                                Das Script dazu zur Erinnerung

                                <?php   ### ftp_get_dir.php ###

                                ($ftp_svr = ftp_connect ( 'server', 2121 )) or die('keine FTP-Server-Verbindung');

                                $login =  ftp_login ( $ftp_svr, '********', '********' );

                                if($login)
                                  {
                                     $_dir = ftp_rawlist ( $ftp_svr, "." );

                                echo "<pre>\n";
                                     print_r($_dir);
                                     echo "</pre>\n";
                                  }

                                ftp_close($ftp_svr);

                                ?>

                                Suche also nach den typischen Mustern für die automatische Formaterkennung.

                                Harzliche Grüße vom Berg
                                http://www.annerschbarrich.de

                                Tom

                                --
                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                Nur selber lernen macht schlau

                                1. Hallo,

                                  dankeschön, haben wer wieder ne Ausgabe mehr und dadurch wird das Skript immer Systemunabhängiger - schön!

                                  Have a nice day - Binni

                                  --
                                  www.GTR-Home.de