PDF-Dateinamen in Array schreiben

guenter024

Erfahrenes Mitglied
Hallo PHP Freunde,

folgendes Problem macht mir zu schaffen:
Ich habe eine Liste mit PDF-dateien, die aus einem Ordner in ein Array geschrieben werden sollen. Von dort gehts dann weiter zur Ausgabe und zum Download.
Ausgabe und Download klappt soweit bislang alles - nur bring ich die Pfade nicht in ein Array... :confused:

Folgenden Code hab ich soweit:
PHP:
function show_all_files($ordner, $sub = FALSE) {
  $handle = opendir($ordner);
  while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {
      if(is_dir($ordner."/".$file)) {
        show_all_files($ordner."/".$file, TRUE);
      } else {
        $files[] = ".".$ordner."/".$file;
      }
    }
  }
  closedir($handle);
}
show_all_files ("./download");

Die Datein werden gefunden, wenn ich bspw.
PHP:
echo ".".$ordner."/".$file."<br>";
schreibe, bekomme ich die Liste wunderbar hin.
Muss ich die Pfade erst in eine txt-Datei schreiben und von dort auslesen, oder was ist an meinem Code falsch?

Ich danke im Voraus für eure Hilfe...

Günter
 
Hallo PHP Freunde,

folgendes Problem macht mir zu schaffen:
Ich habe eine Liste mit PDF-dateien, die aus einem Ordner in ein Array geschrieben werden sollen. Von dort gehts dann weiter zur Ausgabe und zum Download.
Ausgabe und Download klappt soweit bislang alles - nur bring ich die Pfade nicht in ein Array... :confused:

Folgenden Code hab ich soweit:
PHP:
function show_all_files($ordner, $sub = FALSE) {
  $handle = opendir($ordner);
  while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {
      if(is_dir($ordner."/".$file)) {
        show_all_files($ordner."/".$file, TRUE);
      } else {
        $files[] = ".".$ordner."/".$file;
      }
    }
  }
  closedir($handle);
}
show_all_files ("./download");

Die Datein werden gefunden, wenn ich bspw.
PHP:
echo ".".$ordner."/".$file."<br>";
schreibe, bekomme ich die Liste wunderbar hin.
Muss ich die Pfade erst in eine txt-Datei schreiben und von dort auslesen, oder was ist an meinem Code falsch?

Ich danke im Voraus für eure Hilfe...

Günter

Probiers mal auf diese Weise:

PHP:
function show_all_files($ordner, $sub = FALSE) {
  $handle = opendir($ordner);
  $i=0;
  while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {
      if(is_dir($ordner."/".$file)) {
        show_all_files($ordner."/".$file, TRUE);
      } else {
        $files[$i] = ".".$ordner."/".$file;
        $i++;
      }
    }
  }
  closedir($handle);
}
show_all_files ("./download");
 
Wieso hat die Funktion keinen Rückgabewert?
Wofür ist $sub da? Wird gesetzt, aber nie benutzt.

Das hier könnte deinen Vorstellungen entsprechen.

PHP:
<pre>
<?php

function show_all_files($ordner) {
  $handle = opendir($ordner);
  while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {
      if(is_dir($ordner."/".$file)) {
		$files[] = show_all_files($ordner."/".$file);
      } else {
        $files[] = $ordner."/".$file;
      }
    }
  }
  closedir($handle);
  return $files;
}
print_r(show_all_files ("./zf"));  

?>
</pre>
 
Hallo,

danke für die Hilfe.
Bitte entschuldigt, ich hab das Problem nicht ganz klar ausgedrückt.

Die eigentliche Frage ist:
Wenn es sich um ein Array handelt, müsste ich doch die files auch mit

PHP:
foreach ($files as $element) {
    echo $element;
}
oder mit
PHP:
if (in_array ($_GET['filename'], $files)) {
....
}

auslesen können?
Oder hab ich da was falsch verstanden?

Gruß Günter
 
Das zweite ist aber keine Schleife, also es wird nicht das Array durchgegangen, sondern
nur abgefragt ob es im Array ist.
 
Richtig.

Aber beides erzeugt eine Fehlermeldung:

Warning: Invalid argument supplied for foreach() in ...

Warning: in_array() [function.in-array]: Wrong datatype for second argument in ......

Also ist daran was faul ...ich weis nur nicht was.
 
dann ist $files kein Array, so einfach ist das.
was sagt var_dump($files);?

PHP:
$files = show_all_files ("./zf");

dann müsste das gehen.
 
Hallo,

ich trudel von einem Problem zum nächsten ... :-( ...
Das Array ist nun vorhanden, allerdings wird für jedes Verzeichnis ein neues Unterarray angelegt, dadurch bekomme ich ein mehrdimensionales array mit zig Ebenen.

Das ganze lässt sich jetzt ziemlich schwer auslesen.

Gibt es eine einfach Möglichkeit, die Unterarrays in die 1. Ebene zu bringen?

Zum Veranschaulichen:
so sieht es jetzt aus:
Code:
Array
(
    [0] => ./verz1/datei1.pdf
    [1] => ./verz1/datei2.pdf
    [2] => usw.
    [3] => Array
        (
            [0] => ./verz1/verz2/datei3.pdf
            [1] => usw.
            [2] => Array
                (
                    [0] => ./verz1/verz2/verz3/datei4.pdf
                    [1] => usw.
                    [2] => Array
                )
        )
)

so wäre es toll, wenn es aussehen könnte:
Code:
Array
(
    [0] => ./verz1/datei1.pdf
    [1] => ./verz1/datei2.pdf
    [2] => ./verz1/verz2/datei3.pdf
    [3] => ./verz1/verz2/verz3/datei4.pdf
)

Danke im Voraus für Eure Hilfe und Mühe.

Viele Grüße
Günter
 
Zuletzt bearbeitet:
PHP:
<pre> 
<?php 

function show_all_files($ordner) { 
  $handle = opendir($ordner); 
  while ($file = readdir ($handle)) { 
    if($file != "." && $file != "..") { 
      if(is_dir($ordner."/".$file)) { 
        $temp = show_all_files($ordner."/".$file); 
        foreach  ($temp as $value)
        {
                $files[] = $value;
        }    
} else { 
        $files[] = $ordner."/".$file; 
      } 
    } 
  } 
  closedir($handle); 
  return $files; 
} 
$files = show_all_files ("./zf");
var_dump($files);

?> 
</pre>
 
Zurück