Start · Sprachen · PHP · Referenz · rewinddir

rewinddir

Funktion

Setzt den internen Zeiger eines Verzeichnis-Handles auf den Anfang zurück, sodass <code>readdir()</code> erneut ab dem ersten Eintrag liest.

seit PHP 4.0.0 Kategorie: io

Signatur

rewinddir(resource $dir_handle = ?): void

Beschreibung

rewinddir() setzt den internen Lesezeiger eines mit opendir() geöffneten Verzeichnis-Handles zurück an den Anfang. Damit kann man ein und dasselbe Verzeichnis mehrfach durchlaufen, ohne es zu schließen und neu zu öffnen.

Die Funktion ist besonders nützlich, wenn innerhalb einer Schleife über readdir() ein Verzeichnis durchsucht und danach ein zweiter Durchlauf benötigt wird – zum Beispiel um Dateien zu zählen und anschließend zu verarbeiten. Sie spart den Overhead von closedir() und opendir().

Wird kein dir_handle angegeben, arbeitet die Funktion mit dem zuletzt von opendir() geöffneten Handle. Es empfiehlt sich jedoch, das Handle explizit zu übergeben, um unerwartetes Verhalten bei mehreren gleichzeitig offenen Handles zu vermeiden.

Die Reihenfolge der Einträge nach einem Rewind entspricht der Reihenfolge, die das Betriebssystem liefert – meistens alphabetisch oder nach Inode-Reihenfolge. Eine bestimmte Sortierung ist nicht garantiert.

Parameter

Name Typ Default Beschreibung
$dir_handle resource Ein mit opendir() erzeugtes Verzeichnis-Handle. Wird der Parameter weggelassen, wird das zuletzt geöffnete Handle verwendet.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Verzeichnis zweimal durchlaufen

<?php
$dir = opendir('/var/www/uploads');

// Erster Durchlauf: Dateien zählen
$count = 0;
while (($entry = readdir($dir)) !== false) {
    if ($entry !== '.' && $entry !== '..') {
        $count++;
    }
}
echo "Anzahl Dateien: $count\n";

// Zeiger zurücksetzen
rewinddir($dir);

// Zweiter Durchlauf: Dateinamen ausgeben
while (($entry = readdir($dir)) !== false) {
    if ($entry !== '.' && $entry !== '..') {
        echo $entry . "\n";
    }
}

closedir($dir);
Anzahl Dateien: 3 bild1.jpg bild2.png dokument.pdf

Explizites Handle verwenden (empfohlene Praxis)

<?php
$handle1 = opendir('/var/www/uploads');
$handle2 = opendir('/var/www/backups');

// Ersten Handle explizit zurücksetzen, nicht den zuletzt geöffneten
rewinddir($handle1);

while (($file = readdir($handle1)) !== false) {
    if ($file !== '.' && $file !== '..') {
        echo 'Upload: ' . $file . "\n";
    }
}

closedir($handle1);
closedir($handle2);
Upload: bild1.jpg Upload: bild2.png Upload: dokument.pdf

// Wichtig · Fallstricke

Hinweis zu modernem PHP: Ab PHP 5.4 kann statt der prozeduralen opendir()/readdir()/rewinddir()-API die objektorientierte Klasse DirectoryIterator oder FilesystemIterator verwendet werden, die rewind() als Methode bereitstellt und deutlich flexibler ist.

Fallstrick: Wird das dir_handle-Argument weggelassen und sind mehrere Handles gleichzeitig offen, kann es passieren, dass ein falsches Handle zurückgesetzt wird. Immer das Handle explizit übergeben.

Auf einigen Betriebssystemen (insbesondere Windows) kann die Reihenfolge der Einträge nach einem Rewind leicht variieren, falls das Verzeichnis zwischen den Durchläufen verändert wurde.