![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
Rekursives Erstellen von Verzeichnissen
Inhalt Vorwort Was lerne ich hier? Hier lernst, du wie du mit Hilfe der Rekursion eine verbesserte mkdir()-Funktion erstellst. Wie benutze ich dieses Tutorial? In diesem Tutorial wird dir wahrscheinlich viel Unbekanntes begegnen. Solltest du einen Beispielcode nicht verstehen, gib nicht gleich auf. Meist habe ich bei etwas komplizierten Funktionen oder Konstrukten vorher eine entsprechende Info mit einem weiterführendem Link eingefügt. Es lohnt sich, diese Links im Zweifelsfall zu verfolgen. Die folgenden Symbole werden dir im Tutorial öfters begegnen:
Geändert von Ben (11.09.2007 um 15:56 Uhr). |
|
|
|
|
|
Nach oben #2 | |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
1. Unser Problem
Wenn du schonmal mit der Funktion mkdir() gearbeitet hast, wirst du vielleicht schon mal folgende Fehlermeldung gesehen haben: Zitat:
In dem beschriebenen Fall habe ich mkdir() folgendermaßen aufgerufen: PHP-Code:
Ich habe versucht, in einem meiner Projektordner einen Gallerieordner und darin einen Ordner für die Thumnails zu erstellen. Allerdings kann mkdir() bei so einem Aufruf nur einen Ordner erstellen, wenn der Rest der Verzeichnisstruktur bereits besteht. Also müsste der Ordner Code:
/opt/lampp/htdocs/project/gallery_2 Diesem Problem kann man nun in zwei Versionen entgegen wirken. Wenn man bereits für PHP 5 entwickeln kann man die Besonderheit von mkdir() nutzen, Verzeichnisse rekursiv zu erstellen (s. Manual). Oder wir basteln uns die entsprechende Funktion selber. Immerhin haben wir ja bereits das Handwerkszeug gelernt. Und außerdem kann man nicht immer davon aus gehen, dass unsere Skripts auf einem Server mit PHP 5 laufen. Dann wollen wir mal anfangen. Geändert von Jojo (12.03.2006 um 20:18 Uhr). |
|
|
|
|
|
|
Nach oben #3 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
2. Der Ansatz
Zuerst sollten wir uns den Ansatz überlegen. Können wir überhaupt unser Problem rekursiv lösen? Ich habe folgenden Ansatz gefunden: Wir überprüfen zuerst, ob das zu erstellende Verzeichnis schon existiert. (Das ist unsere Abbruchbedingung. Wenn ja, machen wir nichts). Wenn es noch nicht existiert, prüfen wir, ob das übergeordnete Verzeichnis existiert. Wenn ja, erstellen wir das Verzeichnis, dass uns übergeben wurde und sind fertig. Wenn das übergeordnete Verzeichnis nicht existiert, überprüfen wir, ob das darüber existiert, und immer so weiter, bis endlich ein Verzeichnis existiert, was spätestens bei / so sein wird. Was heißt das nun konkret an unserem Beispiel? uns wird folgendes Verzeichnis übergeben Code:
/opt/lampp/htdocs/project/gallery_2/thumbs Code:
/opt/lampp/htdocs/project Nun überprüfen wir, ob Code:
/opt/lampp/htdocs/project/gallery_2 Das ist nicht der Fall, also prüfen wir, ob Code:
/opt/lampp/htdocs/project Dies existiert und darum können wir Code:
/opt/lampp/htdocs/project/gallery_2 Nun können wir auch Code:
/opt/lampp/htdocs/project/gallery_2/thumbs Code:
/opt/lampp/htdocs/project/gallery_2/thumbs Code:
/opt/lampp/htdocs/project/gallery_2 Code:
/opt/lampp/htdocs/project/gallery_2/thumbs Code:
/opt/lampp/htdocs/project/gallery_2 Code:
/opt/lampp/htdocs/project Code:
/opt/lampp/htdocs/project/gallery_2 Code:
/opt/lampp/htdocs/project Geändert von Jojo (12.03.2006 um 20:21 Uhr). |
|
|
|
|
|
Nach oben #4 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
3. Die Planungsphase
Überlegen wir uns mal ein paar Punkte:
Geändert von Jojo (12.03.2006 um 18:55 Uhr). |
|
|
|
|
|
Nach oben #5 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
4. Wir bauen die Funktion
Nachdem wir uns also diese Gedanken gemacht haben, können wir loslegen. Unsere Funktion braucht zuerst einmal einen Namen. PHP-Code:
Nun fügen wir unsere Abbruchbedingung und unseren nicht-rekursiven Weg ein. Unsere Abbruchbedingung ist, dass der Ordner bereits existiert. Da in diesem Fall keine Aktion statt findet, ist auch nichts zu sehen, als die if-Abfrage. PHP-Code:
Wir benötigen ja den übergeordneten Ordner. Dabei hilft uns die Funktion dirname(). Sie ermöglicht es uns aus /opt/lampp/htdocs/project/gallery_2/thumbs/opt/lampp/htdocs/project/gallery_2 zu machen. Also den übergeordneten Ordner. Den wollen wir dann durch die Funktion schicken und danach /opt/lampp/htdocs/project/gallery_2/thumbs per mkdir() erstellen. Das ganze sieht dann so aus: PHP-Code:
Ich habe dir hier die Funktion als php-Script angehängt. Nur habe ich sie dahingehend verbessert, als dass man nun auch die Maskierung der neu erstellten Ordner angeben kann. Geändert von Jojo (12.03.2006 um 18:56 Uhr). |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [PHP] thumbnails erstellen - kleine Funktion | Jann Hendrik | Tutorials | 2 | 16.01.2008 10:38 |
| [PHP] Zufallspasswort - Generator | Jann Hendrik | Tutorials | 1 | 23.11.2007 12:27 |
| [PHP] FTP-Funktionen in PHP nutzen | MrNiceGuy | Tutorials | 0 | 24.05.2006 14:18 |
| [PHP] PDF erstellen - ganz einfaches, schlichtes Beispiel | Jann Hendrik | Tutorials | 4 | 24.11.2005 12:44 |
| [PHP] Wie kann ich eine Textdatei erstellen und mit Inhalt füllen? | Ben | Tutorials | 2 | 06.09.2005 11:17 |