• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ordner auslesen und Dateien automatisch auflisten

aJunkie

Mitglied
Halli Hallo,

Ich habe im Ordner "r1a" die php Seite "r1a.php".
Ich will, dass auf der r1a.php der Inhalt des Ordners "r1a" automatisch nach Dateinamen aufgelistet wird.

Wie bekomme ich das hin?

Ich möchte diesen Code mehrmals einfügen.
Die Dokumente, die aufgelistet werden sollen, befinden sich nämlich nochmal in Unterordnern. Zum Beispiel ... "Deutsch", "Mathematik".
Ich will dann eine Überschrift "Deutsch" und darunter sollen alle Dateien aus dem Unterordner "Deutsch" aufgelistet werden.
Bei Mathe ebenso.

Danke sehr.
 
Werbung:
Mit der Funktion scandir kann man mit wenig aufwand sowas gestalten.

Ist ab PHP 5 standart. Für niedere Versionen kann man scandir so definieren:
PHP:
if (!function_exists('scandir')) {
 function scandir($directory, $sorting_order=0) {
  if(!is_dir($directory)) {
   return false; 
  }
  $files = array();
  $handle = opendir($directory);
  while (false !== ($filename = readdir($handle))) {
   $files[] = $filename; 
  }
  closedir($handle);
  if($sorting_order == 1) {
   rsort($files); 
  } else {
   sort($files); 
  }
  return $files;
 }
}
Mfg
 
Werbung:
Huhu,

danke!

Ich habe mir diesen Codeschnipsel ausgesucht, der aber noch bearbeitet werden muss.

PHP:
<?php
foreach (glob("*") as $filename) {
    echo "$filename - Größe: " . filesize($filename) . "\n";
}
?>

Der zeigt mir den Inhalt an. Allerdings möchte ich, dass nur Dateien, die die Endung .docx haben, angezeigt und automatisch verlinkt werden, sodass man sie auf Klick runterladen kann.
Außerdem listet er mir die Dateien nur untereinander, sondern nebeneinander auf. Das ist unübersichtlich.

Wie muss der Code nun aussehen?
 
Allerdings möchte ich, dass nur Dateien, die die Endung .docx haben, angezeigt und automatisch verlinkt werden, sodass man sie auf Klick runterladen kann.
Außerdem listet er mir die Dateien nur untereinander, sondern nebeneinander auf. Das ist unübersichtlich.

Wie muss der Code nun aussehen?

Ersetze * durch *.docx für den Dateitypen. Und ersetze \n durch <br /> für die Auflistung.

Mfg
 
Okay, klappt super. Vielen Dank.

Nun soll er die automatisch aufgelisteten Dokumente auch automatisch mit dem Pfad verlinken, damit man es runterladen kann.


Und kann ich diesen Code mehrmals einfügen? Wahrscheinlich schon, aber er wird alle Dateien auslesen. Ich hätte es gern so, dass ich den Code zum Beispiel dreimal einfüge, aber drei verschiedene Unterordner ausgelesen werden.
Da muss ich also angeben, welchen Ordner er auslesen soll.

Muss ich diesen Schnipsel oben einfügen?

$dir = "/tmp";
 
Werbung:
Kann mir jemand noch kurz sagen, wie ich die aufgelisteten Dokumente automatisch verlinke, damit man sie gleich runterladen kann?
 
Indem Du den Dateinamen mit einem <a>-Tag umschließt, z.B. so:
PHP:
// $pfad enthält den Pfad zur Datei (relativ oder absolut) ohne abschließendes Slash ( / )
// $filename enthält den durch glob() ermittelten Dateinamen
echo "<a href='".$pfad."/".$filename."'>".$filename."</a>\n";
Gruß thuemmy
 
Danke sehr.

Habe aber jetzt ein Problem.
Die Links werden angezeigt, allerdings stellt er die Links aus dem root Ordner dar. Dabei sind die Dateien gar nicht im root-, sondern im Unterordner.
Was muss ich daran verändern, dass er die Dokumente richtig verlinkt?

Beispiel: 01.dcox ist im Unterordner "r1a". Aber mit dem jetzigen Code, verlinkt er domain.de/01.docx und nicht, wo es wirklich ist: domain.de/r1a/01.docx

Das sieht bisher so aus:
PHP:
<?php
foreach (glob("*.docx") as $filename) {

    
    echo "<a href='".$pfad."/".$filename."'>".$filename."</a><br />";  
}
?>


Edit: Jetzt funktioniert es.
<?php
foreach (glob("*.docx") as $filename) {


echo "<a href='".$pfad."./".$filename."'>".$filename."</a><br />";
}
?>

Nur noch eine letzte Frage. Der listet mir jetzt ALLE Dokumente in diesem Verzeichnis auf.
Ich will die Dokumente aber in Unterordner aufteilen.
Muss ich da "./" "./unterordner" daraus machen?
 
Zuletzt bearbeitet:
Werbung:
Hm schade.

Es funktioniert nur, wenn alle .docx in dem selben Ordner sind und ich kann sie nicht aufteilen.
Ich wollte eben für jedes Schulfach einen Ordner anlegen.

Mathe -> ./mathe
Darin die Dokumente sollen aufgelistet werde.

<p><hr2>Deutsch</hr2></p>
Und ab hier sollten alle Dokumente des Ordners /deutsch aufgelistet werden.

Unabhängig voneinander.
 
Zeig mal was Du bis jetzt hast. Dazu bitte die Ordnerstruktur und den Ordner, indem sich dein Script befindet.

Gruß thuemmy
 
Bitte helft mir mal.

Wenn ich den Pfad eingebe, also "./" umänder in "./unterordner", dann bekomme ich die Fehlermeldung, dass es diesen Ordner bzw. keine Dateien darin geben würden.
Ich habe es öfter versucht.
Mache ich was falsch? Vermutlich beim Includen?

Jemand, der davon Ahnung hat, wird sicherlich keine fünf Minuten brauchen.
Falls erwünscht, schreibt mir eine PM und ich schicke die FTP Zugangsdaten, damit ihr euch das mal genauer angucken könnt.

Edit: Ops, sorry. Habe die zweite Seite übersehen.
Ich mache mal schnell Screenshots.

Beschreibung:
Im root: head.php, footer.php <- Design und Navigation funktieren aber einwandfrei.
Im root ein Unterordner namens "r1a".
Darin soll sich mein Vorhaben abspielen.
Da habe ich die "r1.php", wo man sich zuerst einloggt, um die Seite einsehen zu können.
Bis jetzt habe ich in dem Ordner alle Dokumente. Aber ich möchte im Ordner "r1" nochmal Unterordner für die einzelnen Schulfächer.
Bisher sah das so aus:
r1a.JPG


Aber das soll so aussehen:
r1a%20neu.JPG


Da sind jetzt Unterordner. Die "r1".php-Seite soll aber in dem Verzeichnis so bleiben und den Inhalt aus den Unterordnern auslesen.

Ein Unterordner würde bei mir dann so aussehen:
beispielordner.JPG


Mein bisheriger Code sieht so aus:
<? include ("../head.php"); ?>

<?php





<p><strong>blub</strong></p>

<br class="Stil1">Die Dokumente sind im "docx"-Format abgespeichert und lassen sich mit neueren Versionen des Microsoft Word öffnen.</br>
<br class="Stil1">Hier werden keine Hausaufgaben veröffentlich, lediglich nur im Unterricht Geschriebenes und zusammen Erarbeitetes.</br>
<br class="Stil1">Ich kann nicht für Aktualität, Vollständigkeit und Richtigkeit garantieren.</br>
<br class="Stil1">Bitte nur per "Rechtsklick ->Speichern unter..." herunterladen.</br>
<p></p>




Wie man weiter unten sieht, ist da der Code, der den Inhalt des Ordners "r1" ausliest und alle untereinander ausliest. Schön und gut, aber unübersichtlich.
Das soll jetzt ungefähr so aussehen. Beispiel:

Überschrift

Mathe (Toogle - Bei Klick fährt sich aus)
Inhalt.docx
Inhalt2.docx

Deutsch (Bei Klick öffnet sich der Inhalt)
Inhalt.docx

und so weiter.

Also alle Fächer in Überschriften und darunter der Inhalt.

Das würde codetechnisch ja ungefähr so aussehen?

<h2>Deutsch</h22>
echo "<a href='".$pfad."./DEUTSCH?".$filename."'>".$filename."</a><br />";

Dann wird hier nur alles aus dem Unterordner deutsch ausgelesen.
Code schließt.

Neuer Code mit anderem Pfad (Unterordner) zum Beispiel für Mathe.

Ich hoffe, dass das so verständlich war.
 
Zuletzt bearbeitet:
Werbung:
Hi,
das hat mich etwas stutzig gemacht:
PHP:
 echo "<a href='".$pfad."./DEUTSCH?".$filename."'>".$filename."</a><br />";
so würde mittem im Pfad ein ./ stehen
Probiers mal so:
PHP:
 echo "<a href='$pfad/DEUTSCH/$filename'>$filename</a><br />";
Du kannst in PHP in Strings mit "" einfach Variablen wie $filename oder $this->filename direkt schreiben.

Gruß KY
 
Das funktioniert so auch nicht. Da fehlt dann was im Code.
Wieder eine Fehlermeldung.

Edit: Der gibt mir fast immer die Fehlermeldung foreach. Der findet anscheinend keine docx.
Hat das was mit der Reihenfolge zu tun? Dass er erst nach den Dokumenten sucht und dann die Unterordner öffnen will?
 
Werbung:
Warning: Invalid argument supplied for foreach() in /users/www/r1a.php on line 76
 
Zuletzt bearbeitet:
Das ist klar, da glob inmoment nur auf das Stammverzeichniss wirkt, bzw in dem Verzeichniss, in der du das Script hast. Und da ist keine *.docx Datei. Also gibt glob FALSE zurück.
Zumal sehe ich, das du $pfad garnicht definierst. Was aber den selben Effekt hätte, in dieser Anwendung von glob.

Ich würde dir hierfür die Funktion scandir ans Herz legen, bei den vielen Ordnern und Unterordner/Dateien. Das kann man viel einfacher behandeln.

Mfg
 
Anscheinend muss ich mich wohl mit scandir auseinandersetzen.

Ich habe mir diesen hier kopiert:

PHP:
  <?php
$dir = "/tmp";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;
}

sort($files);

print_r($files);

rsort($files);

print_r($files);

?>

Außer dem Verzeichnis muss ich ja nichts ändern oder?

Edit: Funktioniert nicht. Irgendwas muss ich falsch machen.
Ich denke, es wäre besser, wenn sich jemand mal bei mir melden könnte und ich ihm die FTP Zugangsdaten zuschicke. Wäre echt nett.
Ich brauch nur diese eine Funktion, dass er aus den Unterordner ausliest und verlinkt auflistet.

Danke sehr.
 
Zuletzt bearbeitet:
Werbung:
Ab PHP5 gibt's auch die hübschen Iteratoren. Nicht ganz einfach zu handhaben, aber sehr mächtig und durchaus einen Blick wert.

PHP:
<?php

class FileExtensionFilterIterator extends FilterIterator
{
    protected $whitelist;

    public function __construct(Iterator $iterator, array $whitelist)
    {
        parent::__construct($iterator);
        $this->whitelist = $whitelist;
    }

    public function accept()
    {
        $fileInfo = parent::current();

        // Nur Dateien
        if (!$fileInfo->isFile()) {
            return false;
        }

        // Nur mit Endung aus $whitelist
        $pi = pathinfo($fileInfo->getFilename());
        if (!in_array(strtolower($pi['extension']), $this->whitelist)) {
            return false;
        }

        return true;
    }
}

$path      = '/das/oberste/verzeichnis';
$whitelist = array('txt'); // Aufzulistende Dateiendungen

$iterator = new FileExtensionFilterIterator(
                new RecursiveIteratorIterator(
                    new RecursiveDirectoryIterator($path)),
                $whitelist);

foreach ($iterator as $file) {
    echo $file, "<br />";
}
 
Fehlermeldung:

Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/englisch) [<a href='http://de.php.net/recursivedirectoryiterator.--construct'>recursivedirectoryiterator.--construct</a>]: failed to open dir: No such file or directory' in /users/www/r1a.php:111 Stack trace: #0 /users/www/r1a.php(111): RecursiveDirectoryIterator->__construct('/englisch') #1 {main} thrown in /users/www/r1a.php on line 111

Edit: Ich komme hier nicht mehr weiter.
Entweder klappt's nur, wenn alle Dokumente in dem selben Ordner sind wie die php Datei oder garnicht.
Ich wollte, dass die eine php Datei im oberen Verzeichnis ist und ein Unterordner auflistet mit Pfad.
 
Zuletzt bearbeitet:
Zurück
Oben