Hello World,
ich werkle an einer rekursiven Funktion, die einen übergebenen Pfad einliest und mir die Musikdateien, Bilder und Texte auflistet.
Eine fertige Funktion habe ich so angepasst, dass entsprechende Dateitypen in ihr eigenes Array geschrieben werden, aber mein Problem ist die Ausgabe. :(
Die jetzige Funktion gibt mir eine Baumstruktur aus - ich möchte aber eine Tabelle haben, die mir von links nach rechts Den Ordnernamen, eventuelle Unterordner, Musik-, Bild- und Textdateien ausgibt. Das i-Tüpfelchen wäre noch die Anzahl der Unterordner.
Ich habe folgende Funktion:
Code:
if(!empty($_POST['pfad'])){
// Übermittelten Pfad checken und korrigieren
$pfad = $_POST['pfad'];
$pfad = str_replace('\\','/',$pfad);
if(substr($pfad, -1, 1)=="/"){
$pfad = substr($pfad, 0, -1);
}
if(preg_match("#^[((a-z){1}):]+[/(a-zäöüß 0-9_.,;+\-\[\]\{\}\(\)&%!~)]*$#si", $pfad)){
$hinweis = 0;
}
else{
$hinweis = "<span class=\"hinweis\">Ungültiger Pfad.</span><br />\n";
}
// Dateien einlesen
function ordnerinhalt($folder){
$dir_filter = array('.', '..');
$sound_files = array();
$pic_files = array();
$txt_files = array();
$sound_ext = array('mp3', 'ogg', 'wav', 'flac', 'acc', 'ape', 'wma');
$pic_ext = array('jpg', 'jpeg', 'png', 'gif', 'bmp');
$txt_ext = array('txt', 'doc', 'odt', 'rtf', 'nfo');
$folderArray = array();
$fileArray = array();
$content = "";
if(isset($folder)){
foreach(scandir($folder) as $file){
if(!in_array($file[0], $dir_filter)){ // Versteckte Dateien nicht anzeigen
if(is_dir($folder.'/'.$file)){
$folderArray[] = $file;
}else{
$fileArray[] = $file;
}
}
}
foreach($fileArray as $key => $value){
$file_info = pathinfo($value);
$extension = strtolower($file_info['extension']);
if(in_array($extension, $sound_ext)){
$sound_files[] = $value;
}
elseif(in_array($extension, $pic_ext)){
$pic_files[] = $value;
}
elseif(in_array($extension, $txt_ext)){
$txt_files[] = $value;
}
}
}
// Erst die Ordner ausgeben
if(isset($folderArray)){
foreach($folderArray as $row){
$content .= '<tr><td style="font-size:0.5em;"><b>'.$row.'</b></td>';
$content .= '<td style="width:350px;font-size:0.5em;">'; //Unterordner nach Rechts einrücken
$content .= ordnerinhalt($folder.'/'.$row); // rekursive Funktion
$content .= '</td>';
}
}
// ...dann die Dateien ausgeben
if(isset($sound_files)){
foreach($sound_files as $row){
$content .= '<td style="font-size:0.5em;"><a href="'.$folder.'/'.$row.'">'.$row.'</a></td>'; //Dateien verlinken
}
}
if(isset($pic_files)) {
foreach($pic_files as $row){
$content .= '<td style="font-size:0.5em;"><a href="'.$folder.'/'.$row.'">'.$row.'</a></td>'; //Dateien verlinken
}
}
if(isset($txt_files)) {
foreach($txt_files as $row){
$content .= '<td style="font-size:0.5em;"><a href="'.$folder.'/'.$row.'">'.$row.'</a></td>'; //Dateien verlinken
}
}
$content .= "</tr>";
// Rekursion ende
return $content;
}
$quelle = str_replace('<','<',$pfad);
$quelle = str_replace('>','>',$quelle);
}else{
$quelle = "Kein Pfad.";
}
Und hier der Aufruf:
Code:
if(isset($pfad)){
echo "<span style=\"display:block; margin-bottom:10px;\">Pfad: ".$quelle."</span>\n";
if($hinweis==true){echo $hinweis;}
elseif($hinweis==false){
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
echo ordnerinhalt($pfad);
echo "\n</table>\n";
}
}
Aber diese Formatierung ist alles andere als ansehlich :/
Gibt es eine Möglichkeit, die rekursive Funktion so auszuführen, dass ich die eingelesenen Werte besser handhaben/aufrufen kann?
Danke im voraus,
Nachthertz
PS: Ich arbeite lokal.