Hallo Forum,
ich habe mit Perl einen Filebrowser geschrieben.
Das Skript öffnet per opendir das jeweils übergebene Verzeichnis und erstellt
ein Array mit den Pfaden sämtlicher Ordner und Dateien ... soweit, sogut.
Da es für eine Weboberfläsche gedacht ist, handelt es sich um ein CGI.
Es wird zu jedem Ordner/Datei ein Link erstellt, dass das Filebrowsen sich
wie im Explorer "anfühlt". Hier ein Beispiel
/.
/..
/ordner1
/ordner2
/ordner3
Jetzt möchte ich diversen Usern nur die ein Browsing auf z.B. /ordner1 zulassen.
Das habe ich wie folgt gelöst
foreach my $elem (sort keys %result) {
if($result{$elem}{isdir} == 1) {
if($elem eq ".") {
$selPath = $result{$elem}{filepath};
$selPath =~ s|(.*)\/.*$|$1|gmi;
} elsif($elem eq "..") {
$selPath = $result{$elem}{filepath};
$selPath =~ s|(.*)\/.*\/\.\.$|$1|gmi;
} else {
$selPath = $result{$elem}{filepath};
}
if (($selPath =~ m/\/ordner1/) && ($selPath =~ m/\/\.\.$/)) ) {
print "<a onclick='setVal(\"\",\"".$selPath."\"); return submitForm();' href='#'><img src='/img_directory.gif' style='border=0;vertical-align:text-bottom;margin-left:3px'><span style='margin-left:4px'>".$elem."</span></a><br>\n";
}
}
}
Es wird jetzt auch nur noch der ordner1 angezeigt, doch leider nicht mehr /.. um eine Ebene höher navigieren zu können.
Das Problem besteht natürlich auch eine Ebene unter /ordner1 , da ja entweder die 1. Bedingung mit /ordner1/ oder die 2.
mit /.. funktioniert. Mit && kann ich beide auch nicht verbinden, da ja nur eines pro Schleifendurchlauf
eintreten kann. Wie kann ich realiseren, dass nach klicken auf /ordner1 trotzdem auch noch /.. angezeigt wird?
Wenn ich unter /ordner1 zwei Ebenen tiefer gehe, steht im Pfad für /.. natürlich auch "ordner1" und es wird
angezeigt.
Ich tüftel da jetzt schon etwas länger dran rum, leider ohne Ergebnis. Vielleicht ist es ne ganz leichte Sache...
also bitte nicht "rund machen" =)
Vielen Dank und Gruß
Tolwin