FTP: Datei oder Verzeichnis???
Binni
- php
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
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.
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.
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
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
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
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
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
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:
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
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
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
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
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
'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
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
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
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
Hallo,
dankeschön, haben wer wieder ne Ausgabe mehr und dadurch wird das Skript immer Systemunabhängiger - schön!
Have a nice day - Binni